Трехстороннее слияние - разные философии? - PullRequest
4 голосов
/ 12 апреля 2010

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

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

Скриншот UC http://www.ultraedit.com/assets/images/feature_map/uc/three_way_text.png

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

Скриншот kdiff3 http://hginit.com/i/04-kdiff3-after.png

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

Ответы [ 4 ]

6 голосов
/ 12 апреля 2010

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

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 (объединение).

4 голосов
/ 21 ноября 2010

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

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

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

alt text

3 голосов
/ 12 апреля 2010

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

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

2 голосов
/ 12 апреля 2010

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

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

Графический:

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

и

 aaa
-bbb
+ccc
 ddd

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...