2

原来的:

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

修改_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

此时有人剪了一个分支并将ORIGINAL编辑为MODIFICATION_2。(将第一个<exec>节点从更改failedpassed

master有人将ORIGINAL更改为MODIFICATION_1时。(删除第一个<exec>节点)

将分支合并到 master 时,更改就像RESULT(分支中的更改应用于第二个<exec>节点而不是第一个被删除的节点!)而不是产生EXPECTED_RESULT或导致合并冲突!

这是预期的行为吗?有人可以解释为什么吗?

4

1 回答 1

2

这里的问题是,两个<exec>节点在ORIGINAL中是相同的。因此MODIFICATION_1的删除是不明确的(它可能是第一个或第二个实例),并且合并算法实际上设法应用两个更改而没有任何重叠,因此不会导致合并冲突。

于 2013-03-12T10:48:10.320 回答