Consequências do uso de enxerto no Mercurial
Houve várias perguntas recentemente sobre ignorar alterações ao manter ramificações de lançamento no Mercurial. Por exemplo
Mercurial: alterações específicas de ramificações continuam voltando após a fusão fictíciaPor que os desvios do Mercurial em um ramo afetam outros ramos? Desde que foi introduzido no 2.0, eu me perguntei sobre o uso degraft
para evitar esse problema. Dada uma árvore de revisão como esta:
A---B---C---D---E---F---G---H---I---J
Suponhamos que seja necessário criar um ramo de lançamento que pule a alteração do MalE
.
hg update -r D
hg graft "F::J"
dando-nos
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
Q1: O que aconteceu aqui? Eu posso entender quetransplant
teria gerado patches a partir deF::J
e, em seguida, os aplicou emD
, masgraft
iz-se que @ usa a mesclagem de 3 vias em vez de patches. Então, como isso funciona? Por que é melhor? Digamos que agora conserteE
e mescle isso no meu ramo de lançamento.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 é uma mesclagem direta; nada de especial lá. M2 está mesclando ramificações que possuem "as mesmas alterações" (ou pelo menos equivalentes
Q2: essa mesclagem é apenas uma mesclagem de 3 vias normal usandoD
, J'
eM1
? Q3: O mercurial armazenou / usou informações extras sobre a operação de enxerto para ajudá-lo na mesclageE finalmente..
Q4: Quais são os possíveis problemas com um fluxo como est