Clearcase - выборочное слияние - PullRequest
1 голос
/ 26 апреля 2010

У меня есть своеобразное сомнение в Clearcase. Я не могу полностью описать, почему я делаю такую ​​запутанную архитектуру, но мне нужно это сделать (благодаря ошибке, сделанной кем-то давно).

Хорошо, вот немного деталей: B1 - зараженная ветвь, в которой изменения как моей группы, так и изменения другой группы так сильно смешались, что нет способа найти, чей код чей). Таким образом, предлагаемое решение состоит в том, чтобы создать новую ветвь с именем B2 (на том же уровне, что и B1) и поместить в нее весь немодифицированный код другой группы (способ сделать это - объединить B1 с B2 и затем удалить все изменения от этого, пока это не становится оригинальным). Затем создайте ветку CR на B1 и оставьте только новые или измененные файлы моей группы в этой ветке. Наконец, создайте ветку интеграции из B2 и объедините изменения из ветви CR B1 в ветку интеграции B2.

Итак, вот что я сделал: (Случай использования, где у меня есть dir D, где есть файлы a, b и c. Моя группа закончила изменять файл a, в то время как b и c не изменились вообще).

Есть ветка B1, на которой есть файлы a, b и c. Есть еще одна ветка B2. Слияние сделано из B1 в B2. Теперь B2 также имеет a, b и c.

В этот момент обе ветви B1 и B2 совпадают. Сейчас я удаляю файл a из ветки B2 (rmname). Теперь В2 имеет только b и c. Я поместил ярлык в эту ветку под названием Label1. Это делает код с меткой Label1 как неизмененный код из другой группы.

Теперь я создаю подчиненную ветвь с именем CR1 из B1 и удаляю все файлы, которые есть в ветке B2 (т.е. b и c), так что она содержит только модифицированный код из исходного кода на нем. В моем случае это файл.

В этот момент ветка B2 с меткой Label1 имеет файлы b и c (это немодифицированный код), а ветвь CR1, выходящая из B1, имеет только a (которая была изменена нами).

Теперь я создаю еще одну ветку, которая называется интеграционной веткой, которая идет от B2 Label1. И затем я делаю слияние ветки CR с этим, ожидая, что у меня будут все три файла a, b и c для меня. Все, что мне нужно сделать, это сделать представление дерева версий и посмотреть, кто что изменил.

Но проблема, с которой я сталкиваюсь, заключается в том, что, поскольку я уже сделал rmname файла a в ветке B2 до установки Label. В результате слияния файл a из ветви CR не берется.

Как мне обойти эту проблему. Я хочу выборочно слить. Возможно ли это?

извините, если это плохой дизайн. Я не очень разбираюсь в деле «Очистить» и у меня ограниченные возможности и время, чтобы очистить чужой бардак.

1 Ответ

1 голос
/ 26 апреля 2010

(язык в щеке)
В одной из этих ситуаций я фактически создаю рабочую область git в моем представлении ClearCase , распутываю ситуацию в ветвях Git, прежде чем clearfsimporting вернет результат!

Еще к делу:

      CR1----------------------------(a)
      .  (C1 branch from B1)           \  (a merged to Int)  
     .                                  \ 
B1-(abc)                               Int (b,c)  # where is a???
     .                                  . 
       .  (B2 branch from B1)          .  (Int branch from B2)
      B2-(abc)-----------------------(bc,label1)

Слияние с CR1 не добавит обратно, потому что:

  • общий предок A (на B1) был частью B2, прежде чем был удален на B2
  • Int прибывает из B2
  • a не рассматривается для слияния с веткой, приходящей из B2, так как она уже была частью B2.

В этом случае я бы порекомендовал графическое слияние каталога, которое позволило бы вам вручную решить это слияние (принудительное разрешение: "take a")

...