In letzter Zeit gab es mehrere Fragen zum Überspringen von Änderungen beim Verwalten von Release-Zweigen in Mercurial. Beispielsweise:
- Mercurial: Nach der Dummy-Zusammenführung werden immer wieder branchenspezifische Änderungen vorgenommen
- Warum wirken sich Mercurial Backouts in einem Zweig auf andere Zweige aus?
Seit es in 2.0 eingeführt wurde, habe ich mich gefragt, ob ich graft
dieses Problem vermeiden soll. Bei einem Revisionsbaum wie diesem:
A---B---C---D---E---F---G---H---I---J
Angenommen, wir müssen einen Release-Zweig erstellen, der die Evil-Änderung überspringt E
.
hg update -r D
hg graft "F::J"
geben uns:
A---B---C---D---E---F---G---H---I---J
\
--F'--G'--H'--I'--J'
- Q1: Was ist gerade hier passiert? Ich kann verstehen, dass
transplant
Patches daraus generiertF::J
und dann angewendet wurdenD
, aber esgraft
wird gesagt, dass die 3-Wege-Zusammenführung anstelle von Patches verwendet wird. Also ....... wie funktioniert das? Warum ist es besser?
Nehmen wir an, ich behebe das Problem jetzt E
und füge es in meinen Release-Zweig ein.
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 ist eine gerade Verschmelzung; nichts besonderes da. M2 führt Zweige zusammen, bei denen "die gleichen" (oder zumindest gleichwertigen) Änderungen vorgenommen wurden.
- Q2: Ist das merge nur eine normale 3-Wege - Zusammenführung mit
D
,J'
undM1
? - F3: Hat Quecksilber zusätzliche Informationen über die Transplantatoperation gespeichert / verwendet, um die Zusammenführung zu erleichtern?
Und schlussendlich...
- F4: Was sind die potenziellen Probleme bei einem solchen Fluss?
quelle
Q1: Es hilft, wenn es Konflikte gibt. Sie können dann Ihr übliches Zusammenführungswerkzeug verwenden (für mich sind es Inline-Konfliktmarkierungen, die ich im Emmer-Smerge-Modus bearbeite).
F2: Es ist eine normale Zusammenführung.
Q3: Nein.
F4: Ich finde es hässlich, zwei fast identische Zweige zu haben.
quelle