В последнее время возникло несколько вопросов о пропуске изменений при поддержке веток выпуска в Mercurial. Например:
- Mercurial: специфические для ветки изменения продолжают возвращаться после фиктивного слияния
- Почему отступы 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'
- 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? - В3: Сохраняла ли Mercurial / использовала дополнительную информацию об операции трансплантата, чтобы помочь ей при слиянии?
И наконец...
- Q4: Каковы потенциальные проблемы с таким потоком?