我读了一篇关于三方合并的文章。它给出了一个关于如何检测冲突的示例。示例如下:
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
)!谁能告诉我为什么我有这个冲突?
这个问题与这个问题非常相似,答案也是:这是因为每个diff块不仅包含文字差异,还包含一些上下文行,这些上下文行需要在添加/删除了一些行的文件中定位差异,因此块偏移量发生了变化。上下文的差异也是一种冲突,因为根据你首先应用的补丁,你正在改变另一个补丁的上下文。