我读了一篇关于三向合并的文章(diff3)。它给出了一个如何检测冲突的示例。例子是:
A=[1,4,5,2,3,6]
O=[1,2,3,4,5,6] <<< Origin
B=[1,2,4,5,3,6]
第一次计算O-A和O-B之后的差异:
A=[1,4,5,2,3, ,6]
O=[1, ,2,3,4,5,6]
和
O=[1,2,3,4,5, ,6]
B=[1,2, ,4,5,3,6]
制作diff3 parse
之后:
A=[1,4,5,2, 3 ,6] O=[1, ,2, 3,4,5 ,6] <<< Origin B=[1, ,2, 4,5,3 ,6]
在发现冲突后:
1
4
5
2
<<<<<<<<<A
3
|||||||O
3
4
5
=======
4
5
3
>>>>>>B
6
按照此方法检测冲突,我尝试一个简单的例子: 最初我有文件:
a;
b;
我做了更新
用户1将"a;"
更新为"a=0;"
用户2将"b;"
更新为"b=0;"
我得到了这个结果:
xx
<<<<<<< A
int a=0;
int b;
||||||| O
int a;
int b;
=======
int a;
int b=0;
>>>
当我合并这两个文件时,即使我不在相同的位置(a and b are not at the same position
)进行更改,我也会有冲突!有人可以解释我为什么会发生这种冲突?
答案 0 :(得分:1)
这个问题与this one非常相似,答案也是:那是因为每个差异块不仅包含字面差异,还包括定位差异所需的某些上下文行。添加/删除了一些行的文件,因此hunk偏移发生了变化。上下文中的差异也是一种冲突,因为根据您首先应用的补丁,您将更改其他补丁的上下文。