最近、Mercurialでリリースブランチを維持するときに変更をスキップすることについていくつかの質問がありました。例えば:
これは2.0で導入されて以来、graft
この問題を回避するためにを使用することについて疑問に思っていました。次のようなリビジョンツリーがあるとします。
A---B---C---D---E---F---G---H---I---J
悪の変更をスキップするリリースブランチを作成する必要があるとします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
むしろパッチよりも3ウェイマージを使用すると言われています。それで……それはどのように機能しますか?なぜそれが良いのですか?
今修正し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
? - Q3:mercurialは、マージ操作に役立つ移植操作に関する追加情報を保存/使用していますか?
そして最後に...
- Q4:このようなフローの潜在的な問題は何ですか?