Подтвердить что ты не робот

Как 3 способа сливаются в Mercurial/Meld?

Я работаю над проектом, где у меня есть фиксация, в которой появилась функция с серьезными проблемами, которые не были обнаружены сразу. Теперь я хочу полностью удалить эту ревизию, сохраняя при этом работу, следуя за ней, но мне нелегко обернуть голову вокруг этого трехмерного слияния. Вот упрощенный график моего проекта.

o  changeset:   134:7f81764aa03a
|  tag:         tip
|  parent:      128:451d8a19edea
|  summary:     Backed out changeset 451d8a19edea
|
| @  changeset:   133:5eefa40e2a29
| |  summary:     (Change I need to keep keep)
| |
*snip 3 commits*
| o  changeset:   129:5f6182a97d40
|/   summary:     (Change I need to keep keep)
|
o  changeset:   128:451d8a19edea
|  summary:     (Change that introduced a major problem)
|
o  changeset:   127:4f26dc55455d
|  summary:     (summary doesn't matter for this question)

Если я правильно это понимаю, r127 и r134 будут точно такими же. Когда я hg up -C -r 133, а затем запустите hg merge, Meld появится с тремя формами одного из моих файлов: локального, базового и другого. Кажется, что локальный r133, но мне сложно свернуть голову вокруг того, что означает "базовый" и "другой".

4b9b3361

Ответ 1

Локальный - r133

Другое - r134

База - r128 (общий предок как для r133, так и для r 134)

Когда вы выполняете 3-х мерное слияние, они сравнивают все три из них вместе, чтобы помочь вам решить, что взять и откуда. Увидев, что изменилось в другой редакции и как выглядел общий предк, вы можете сделать гораздо более обоснованное решение о том, что сохранить и что измениться.

Ответ 2

Ваш вопрос действительно запутан, но вот некоторая информация, которая может вам помочь.

  • Что такое база?

База - это немодифицированная версия ревизии, которую вы в настоящее время проверили и сработали. где возможно изменение других изменений (у вас могут быть изменения между вашим текущим местным и базовым!). его как раз там, где ближайшая ревизия, где никакая другая вилка не отвлекалась от потом (тот же самый родитель) (в вашем случае r128)

  • Что такое голова?

Head - последняя версия в управлении версиями. если вы работаете в одиночку только на одном экземпляре, это, вероятно, будет основой. но сотрудник-коллега мог бы изменить тот же файл и проверить его на управление версиями, затем голова позже вашей базы.

  • Что локально?

Локальная - это ваша модифицированная версия (в вашем случае r133)

  • Что еще?

Другое - это некоторая fork/branch, у которой также есть Base как родительский (в вашем случае r134)

  • Как работает трехстороннее слияние?

3 способа слияния (по крайней мере, в сочетании) иерархически. обычно слева направо:

local > base > other/head

local/base в основном тривиально, потому что именно то, что вы изменили

тогда вы можете объединить свои изменения в головную ревизию или с кем-либо из ваших сотрудников или что-то еще.

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