Как работает трехстороннее слияние в 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 с тремя формами одного из моих файлов: локальный, базовый и другой. local кажется r133, но мне трудно понять, что означают «база» и «другое».


person Asa Ayers    schedule 02.10.2010    source источник


Ответы (2)


Местный – это r133.

Другое — r134.

Основой является r128 (общий предок r133 и r 134).

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

person Matthew Manela    schedule 02.10.2010
comment
Итак, вы говорите, что большая часть этого будет ручным слиянием? - person Pacerier; 25.03.2015

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

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

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

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

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

  • Что такое местное?

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

  • Что другое?

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

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

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

местный > база > другой / руководитель

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

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

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

person The Surrican    schedule 02.10.2010
comment
Ваше определение головы не является точным для mercurial. Последняя версия в mercurial называется «tip». Чаевые — это всегда голова, но голова — это не всегда чаевые. При слиянии «голова» никогда не является «базой», потому что «база» является самым последним общим предком двух объединяемых наборов изменений. - person Ry4an Brase; 02.10.2010