2

オリジナル:

  "<tasks>"
+ " <exec command="ls">"
+ "  <runif status="failed" />"
+ " </exec>"
+ " <exec command="ls">"
+ "  <runif status="failed" />"
+ " </exec>"
+ "</tasks>";

MODIFICATION_1:

  "<tasks>"
+ " <exec command="ls">"
+ "  <runif status="failed" />"
+ " </exec>"
+ "</tasks>";

変更_2:

 "<tasks>"
+ " <exec command="ls">"
+ "  <runif status="passed" />"
+ " </exec>"
+ " <exec command="ls">"
+ "  <runif status="failed" />"
+ " </exec>"
+ "</tasks>";

結果:

  "<tasks>"
+ " <exec command="ls">"
+ "  <runif status="passed" />"
+ " </exec>"
+ "</tasks>";

期待される結果:

 "<tasks>"
+ " <exec command="ls">"
+ "  <runif status="failed" />"
+ " </exec>"
+ "</tasks>";

ファイルの元のコンテンツはORIGINALです。

誰かがこの時点で枝を切り取り、ORIGINALMODIFICATION_2に編集しました。(最初の<exec>ノードを からfailedに変更passed)

master誰かがORIGINALMODIFICATION_1に変更しました。(最初の<exec>ノードの削除)

ブランチを master にマージすると、 EXPECTED_RESULTが生成されたり、マージの競合が発生したりする代わりに、変更はRESULT<exec>のようになります (ブランチの変更は、削除された最初のノードではなく2 番目のノードに適用されます!)。

これは予想される動作ですか?誰かが理由を説明できますか?

4

1 に答える 1

2

ここでの問題は、両方のノードがORIGINAL<exec>で同一であることです。したがって、MODIFICATION_1 による削除あいまいであり (最初または 2 番目のインスタンスのいずれかである可能性があります)、マージ アルゴリズムは実際に重複することなく両方の変更を適用するため、マージの競合は発生しません。

于 2013-03-12T10:48:10.320 に答える