2011-06-17 78 views
3

我發現下列情況。相鄰行上的Mercurial合併衝突

$ hg init 
$ echo ' 
> line 1 
> line 2 
> ' > file.txt 
$ hg add file.txt 
$ hg commit -m 'added' 
$ echo ' 
> line 11 
> line 2 
> ' > file.txt 
$ hg commit -m 'changed line 1' 
$ hg update 0 
$ echo ' 
> line 1 
> line 21 
> ' > file.txt 
$ hg commit -m 'changed line 2' 
$ hg merge 1 

結果:

合併file.txt的失敗!

汞差異file.txt的

diff -r bc62305d407b file.txt 
--- a/file.txt Fri Jun 17 22:53:22 2011 +0300 
+++ b/file.txt Fri Jun 17 22:53:46 2011 +0300 
@@ -1,4 +1,9 @@ 

+<<<<<<< local 
line 1 
line 21 
+======= 
+line 11 
+line 2 
+>>>>>>> other 

如果我們嘗試出現上述情況,但有3條線路和變化都在1和2號線,合併會成功。所以,我的問題爲什麼這是發生?這是合併算法還是其他問題?

回答

2

Mercurial無法自動合併,因爲人類必須解決衝突。水銀怎麼知道,如果合併後的版本應該包含

line 1 
line 21 

line 11 
line 2 

水銀合併的一側不考慮作爲可能優先的權威。 file.txt中的標記是Mercurial提示您需要手的地方。

但是,您可以避免在衝突時使用configuring an interactive merge tool這種文件標記。也看看this related question

+1

已故的評論道歉。 但是,對我來說,這並沒有真正回答這個問題。 在提交r1中,只有第一行發生了變化,在r2中只有第二行發生了變化。 我希望hg能夠_get_ this並自動將文件內容合併到: 'line 11' 'line 21' – Carsten