Недавно было несколько вопросов о пропуске изменений при поддержке веток релиза в Mercurial. Например:
Поскольку это было введено в версии 2.0, я задавался вопросом об использовании graft
, чтобы избежать этой проблемы. Учитывая такое дерево ревизий:
A---B---C---D---E---F---G---H---I---J
Предположим, нам нужно создать ветку релиза, которая пропускает изменение Evil E
.
hg update -r D
hg graft "F::J"
предоставив нам:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
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 объединяет ветки, которые имеют «одинаковые» (или, по крайней мере, эквивалентные) изменения.
D
, J'
и M1
?И, наконец...