2013-05-14 105 views
5

我讀了一篇關於三路合併(diff3)的文章。它舉例說明如何檢測衝突。的例子是:git上的奇怪衝突

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

在第一次計算OA之間和OB後的差異:

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;" 我獲得此資源ULT:

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

是否爲a; b;在同一行的文件中? – Schleis 2013-05-14 14:45:42

+0

沒有不在同一行! – Mehdi 2013-05-14 14:47:57

+0

如果整個文檔只有3行長,那麼它可能只是沒有足夠的上下文差異來正確識別非衝突的情況。如果差異混淆,這是一個衝突;) – 2013-05-14 14:53:00

回答

1

這個問題與this one非常相似,答案也是這樣的:這是因爲每個diff hunk不僅包含字面差異,還包含一些上下文行,這些行需要在文件中定位差異一些行添加/刪除,因此大塊偏移改變。上下文中的差異也是衝突,因爲根據您要應用的補丁程序,首先要更改其他補丁程序的上下文。