Трехстороннее слияние - разные философии?

Я был пользователем UltraCompare Pro с момента его появления, и я думаю, что это очень полнофункциональный инструмент сравнения и слияния. Однако, так как я более внимательно изучил DVCS, я обнаружил, что он обрабатывает трехсторонние слияния иначе, чем (большинство?) Других инструментов. Поэтому мне интересно, почему это так, и я что-то упускаю из-за этого.

В UltraCompare есть три панели слияния (назовем их базовыми, локальными и другими). Все действия по слиянию происходят внутри этих панелей. На практике это означает, что я делаю свою работу на средней панели (локальной), объединяя изменения справа (другой) или, возможно, от общего предка слева (основа). Средняя панель изменяется во время сеанса, а затем сохраняется - и фиксируется в результате слияния. Четвертая панель (окно вывода) содержит только информацию о результатах сравнения.

http://www.ultraedit.com/assets/images/feature_map/uc/three_way_text.png

В других инструментах кажется, что три панели существуют только в состоянии только для чтения, и что четвертая нижняя панель (выходные данные) - это место, где происходит все слияние. Каковы причины иметь дополнительное окно слияния? Легче ли отслеживать все изменения? Или это просто так, потому что все всегда так делали, поэтому мы копируем это поведение? Каково ваше мнение по этому поводу?

http://hginit.com/i/04-kdiff3-after.png

Я не уверен, существует ли лучший или правильный ответ, поэтому я еще не сделал этот вопрос CW, но я также полагаюсь на ваше мнение здесь.

4 ответа

Решение

Мне кажется, что вы можете оставить неизменную "локальную" версию видимой, когда вносите свои изменения.

original       local         other           merged

               bar= foo+1    bar= foo+2      bof= foo+2
                                             zot= foo+1
...            ...           ...             ...
print foo      print bar     print foo+1     print bar??

И то и другое local а также other ввел новую переменную bar, Объединить первое изменение с bof/zot, выпей чашку чая, вернись и попробуй объединить print, Подожди, что было bar в local? Если оригинал local нет, эта информация исчезла, и вы копаетесь в другом текстовом редакторе, чтобы выяснить, что произошло.

Это надуманный пример, но такого рода вещи могут легко произойти для любого набора изменений, которые вы не можете держать все в своей голове и сделать за один раз. В общем, 3WM всегда имеет два переменных элемента: изменение A и изменение B. Чтобы воспроизвести всю информацию в нем, вам необходимо четыре представления для всех возможных перестановок: 0 (оригинал), A, B, а также AB (слияние).

Проект: Слияние - это инструмент сравнения и слияния, который я написал для XML. Я посмотрел на стандартный четырехпанельный подход и почти сразу же отбросил его как очень расточительный способ отображения данных. Точка, доказанная на скриншотах выше, где почти все панели показывают одни и те же данные несколько раз.

Поэтому я разработал подход с одной панелью для отображения всех входных файлов и показа, какой из них вносит вклад в вывод. (Или где различия при сравнении файлов.) Хотя я не разрешил полностью свободное редактирование текста в форме (в основном из-за того, как управляются и ссылаются на узлы XML), некоторые части вывода слияния можно редактировать более или менее по мере того, как вы будет в обычном текстовом редакторе. (Мои сочетания клавиш редактора точно соответствуют клавишам Visual Studio в том, что касается навигации.) В первую очередь символьные данные, комментарии и значения атрибутов. Вы также можете вырезать и вставлять узлы XML в полном объеме. (Но, очевидно, только как текст для внешних приложений.)

На следующем снимке экрана показано трехстороннее слияние с большинством изменений, отображаемых в "левом" файле, и неразрешенный конфликт под выбранным изменением:

альтернативный текст

Лично мне нравится бесплатный инструмент слияния перформса (p4merge). Он также имеет 4 окна - верхнюю середину для оригинала (перед ветвлением), слева для конечной ветви, справа для исходной ветви и нижнюю часть можно редактировать.

Мне это нравится больше, чем ваш вариант 1, поскольку все 3 исходных файла могут содержать важную информацию, которая может повлиять на слияние.

Есть два основных способа отображения различий между двумя файлами:

  • Две панели рядом
  • Одна панель

Графически:

aaa aaa
bbb ···
··· ccc
ddd ddd

а также

 aaa
-bbb
+ccc
 ddd

Некоторые программы используют первую (например, WinMerge), а некоторые программы позволяют выбирать (например, TortoiseMerge или Google Project Hosting). Это, вероятно, дело вкуса, но я нахожу второе более интуитивным, когда вы хотите отслеживать изменения. Тем не менее, вам нужно две панели, когда вы хотите редактировать изменения.

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

Опять же, я считаю, что это просто вопрос вкуса.

Другие вопросы по тегам