В последнее время было несколько вопросов о пропуске изменений при сохранении ветвей выпуска в Mercurial. Например:Последствия использования трансплантата в Mercurial
- Mercurial: Branch specific changes keep coming back after dummy merge
- Why are Mercurial backouts in one branch affecting other branches?
Поскольку она была введена в 2.0, я задавался вопросом об использовании graft
, чтобы избежать этой проблемы. Учитывая ревизионную дерево, как это:
A---B---C---D---E---F---G---H---I---J
Предположим, что нам нужно создать релиз ветвь, которая пропускает Зла изменения E
.
hg update -r D
hg graft "F::J"
дает нам:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- Q1: Что только что произошло здесь? Я могу понять, что
transplant
сгенерировал патчи изF::J
, а затем применил их наD
, ноgraft
, как говорят, использует трехстороннее слияние, а не патчи. Итак ... как это работает? Почему это лучше?
Скажем, теперь я исправлю E
и объединить это в свою ветвь освобождения.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 - прямое слияние; ничего особенного нет. M2 объединяет ветви, которые имеют «тот же» (или, по крайней мере, эквивалент) изменения.
- Q2: Является ли это слияние просто обычный 3-полосная слияния с использованием
D
,J'
иM1
? - Q3: Меркурий хранит/использует дополнительную информацию о операции трансплантата, чтобы помочь ему слиянием?
И наконец ...
- Q4: Каковы потенциальные проблемы, связанные с потоком, как это?
Большой вопрос, отличный ответ :). +1 к обоим! –
Спасибо Мартин. Это довольно забавное мышление того, кто придумал это. У меня есть идея, но мне нужно разобраться в общем случае. Я предполагаю, что это имеет значение независимо от пути между узлами, которые вы прививаете в/из? –
@PaulS: Я думаю, все, что вам нужно знать, - это то, что трансплантат может копировать набор изменений более надежным способом, чем трансплантат. Надежность в том смысле, что переименования обрабатываются и что вы можете разрешать конфликты в средстве слияния. Детали находятся в странных слияниях, но это, надеюсь, не обязательно для повседневного использования трансплантата! :-) –