ORIGINAL:
"<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>";
MODIFICATION_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>";
EXPECTED_RESULT:
"<tasks>"
+ " <exec command="ls">"
+ " <runif status="failed" />"
+ " </exec>"
+ "</tasks>";
文件中的原始内容为 ORIGINAL 。
此时有人剪了一个分支,并将 ORIGINAL 编辑为 MODIFICATION_2 。 (将第一个<exec>
节点从failed
更改为passed
)
在master
时,某人将原始更改为 MODIFICATION_1 。 (删除第一个<exec>
节点)
将分支合并为master时,更改类似于 RESULT (分支中的更改将应用于第二个<exec>
节点而不是第一个被删除的节点!)而不是生成 EXPECTED_RESULT 或导致合并冲突!
这是预期的行为吗?有人可以解释原因吗?
答案 0 :(得分:2)
这里的问题是,两个<exec>
节点在 ORIGINAL 中是相同的。因此, MODIFICATION_1 的删除是不明确的(它可能是第一个或第二个实例),并且合并算法实际上设法应用这两个更改而没有任何重叠,因此不会导致合并冲突。