[解決済み] Mercurialでgraftを使用した場合の影響
質問
最近、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
はパッチではなく、3ウェイマージを使用すると言われています。では......どうなんでしょう?なぜそれが良いのでしょうか?
今、私が以下を修正したとしましょう。
E
を修正し、それをリリースブランチにマージするとします。
--E2-----------------
/ \
A---B---C---D---E---F---G---H---I---J---M1
\ \
--F'--G'--H'--I'--J'---------M2--
M1 はストレートなマージです。 M2 は、同じ (あるいは少なくとも同等の) 変更があるブランチをマージするものです。
-
Q2: このマージは、通常の
D
,J'
とM1
? - Q3: mercurial は移植作業に関する余分な情報を保存/使用して、マージに役立てましたか?
そして最後に...
- Q4:このようなフローの場合、どのような問題が考えられるでしょうか?
どのように解決するのですか?
を更新すると
D
を更新し、グラフト
F::J
とすると、Mercurial はいくつものマージを実行します。このマージから開始されます。
M = three_way_merge(local=D, other=F, base=E)
と書くと
+d
と書くと、状態間のデルタは
C
と
D
で始める。
+d +e +f
---- C ---- D ---- E ---- F ----
グラフを時計回りに90度回転させると、上記の三者間結合は次のようになります。
-e
.---- D
/
E
\
'---- F
+f
で始めたことにするのです。
E
を適用し、その反対を
-e
になるように
D
. の逆パッチとして考えています。
+e
. で始まる
E
の状態にもなりました。
F
で、通常のデルタ
+f
. ここでは何も不思議なことはありません。
D
,
E
そして
F
) がすでにリポジトリにあります。ですから、このように見てくると、明らかに
D
と
F
.
マージは、"ダイヤモンドを完成させることです"。そこで、新しい状態を見つける
M
の混合である
D
と
F
との差はどこにあるのでしょうか?
D
から
M
は
+f
との違いは
F
から
M
は
-e
. こんな感じです。
-e +f'
.---- D ----.
/ \
E M
\ /
'---- F ----'
+f -e'
は
+f
デルタは
+f'
となり
-e
となり、デルタは
-e'
. これは通常の 3 者間マージですが、その効果は興味深いものです。
F
の上に
D
の代わりに
E
!
マージ後、2番目の親である
M
から
F
は削除されます。
-e +f'
.---- D ----.
/ \
E M
\
'---- F
+f
もう一度言います。の "効果" をコピーしました。
F
の上に
D
を発見した、つまり、デルタ(
+f'
)に適用された
D
と同じ効果を与えます。
+f
が適用されたときと同じ効果が得られます。
E
. グラフを少しまっすぐにすると、こうなります。
+f'
--- D ---- M
\
'---- E ---- F
+e +f
その結果
F
に接ぎ木されます。
D
に接ぎ木されます。
-
Q1: 今、ここで何が起こったのでしょうか? それで......どうなんですか?なぜそれが良いのでしょうか?
A1: パッチよりもマージの方が、リネームのようなものを考慮に入れてくれるので、マージを使う方がよいでしょう。
-
Q2: このマージは、D、J'、M1を使った普通の3ウェイマージですか?
A2: はい、接ぎ木はグラフのトポロジーを変更しません。
-
Q3: mercurial は移植作業に関する余分な情報を保存/使用して、マージの手助けをしてきましたか?
A3: いいえ。
-
Q4: このようなフローの場合、どのような問題が考えられるでしょうか?
A4: マージの観点からは、それは問題なく動作するはずです。それは、人々を混乱させるかもしれないいくつかの履歴を重複させるでしょう。
関連
-
[解決済み] hg forgetとhg removeの違いは何ですか?
-
[解決済み] Git を使って前のコミットから分岐させる
-
[解決済み] MercurialとGitの違いは何ですか?
-
[解決済み] Mercurialで不正なコミットメッセージを編集するには?重複
-
[解決済み】ソースコントロールに変更をコミットする頻度を教えてください。[クローズド]
-
[解決済み】どのようなGitブランチングモデルが有効ですか?
-
[解決済み】GitとMercurial - 比較と対比
-
[解決済み] ソフトウェアのバージョン番号付けはどのようなルールで行われているのですか?重複
-
[解決済み] .gradleフォルダはバージョン管理に追加すべきですか?
-
[解決済み] どのような場合に支店を設立すべきなのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DreamWeaver の _notes フォルダと dwsync.xml ファイルは、ソースコントロールによって安全に無視できますか?
-
[解決済み】3ウェイマージの方が2ウェイマージより有利なのはなぜですか?
-
[解決済み] 開発はブランチで続けるか、トランクで続けるか?[クローズド]
-
[解決済み] 名前付きブランチとマルチリポジトリの比較
-
[解決済み] Mercurial (hg) は特定のファイルだけをコミットする
-
[解決済み] ソフトウェアのバージョン番号付けはどのようなルールで行われているのですか?重複
-
[解決済み] hg のバージョン間でどのファイルが変更されたかのリストを生成する
-
[解決済み] git add . vs git commit -a
-
[解決済み] .gradleフォルダはバージョン管理に追加すべきですか?
-
[解決済み] Perforceでファイルを "無視 "できますか?