5

我读了一篇关于三向合并(diff3)的文章。它提供了一个关于如何检测冲突的示例。例子是:

A=[1,4,5,2,3,6]
O=[1,2,3,4,5,6] <<< Origin
B=[1,2,4,5,3,6]

它第一次计算 OA 和 OB 之后的差异:

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)更改,我也会发生冲突!有人可以解释我为什么会有这种冲突?

4

1 回答 1

1

这个问题与这个问题非常相似,答案也是:那是因为每个 diff hunk 不仅包含字面差异,还包含一些上下文行,这些行需要在添加了一些行的文件中定位差异/ 删除,因此大块偏移量发生了变化。上下文的差异也是一个冲突,因为根据您首先应用的补丁,您正在更改另一个补丁的上下文。

于 2013-05-27T14:25:10.917 回答