Recentemente ci sono state diverse domande sul saltare le modifiche durante la manutenzione dei rami di rilascio in Mercurial. Per esempio:
- Mercurial: le modifiche specifiche del ramo continuano a tornare dopo l'unione fittizia
- Perché i ritiri di Mercurial in un ramo influiscono su altri rami?
Da quando è stato introdotto nella 2.0, mi sono chiesto se utilizzare graft
per evitare questo problema. Dato un albero di revisione come questo:
A---B---C---D---E---F---G---H---I---J
Supponiamo di dover creare un ramo di rilascio che salti la modifica di Evil E
.
hg update -r D
hg graft "F::J"
dandoci:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- Q1: cosa è appena successo qui? Posso capire che
transplant
avrebbe generato patchF::J
e poi le avrebbe applicateD
, magraft
si dice che usi l'unione a 3 vie piuttosto che le patch. Allora ....... come funziona? Perché è meglio?
Diciamo che ora lo aggiusto E
e lo unisco nel mio ramo di rilascio.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 è una fusione lineare; niente di speciale lì. M2 sta unendo rami che hanno modifiche "uguali" (o almeno equivalenti).
- Q2: È questo merge solo una normale fusione a 3 vie utilizzando
D
,J'
eM1
? - D3: Mercurial ha memorizzato / utilizzato informazioni aggiuntive sull'operazione di innesto per facilitare l'unione?
E infine...
- D4: Quali sono i potenziali problemi con un flusso come questo?