相邻线上的Mercurial合并冲突

时间:2011-06-17 19:59:27

标签: mercurial merge

我发现以下案例。

$ 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失败!

hg diff 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行,则合并将成功。 那么,我的问题为什么会这样呢?这是合并算法或其他问题吗?

1 个答案:

答案 0 :(得分:2)

Mercurial无法自动合并,因为人类必须解决冲突。如果合并版本应该包含

,Mercurial应该如何知道
line 1
line 21

line 11
line 2

Mercurial并未将合并的一方视为可以优先考虑的权威。 file.txt中的标记是Mercurial为您提供需要的提示。

但是,您可以通过configuring an interactive merge tool避免此类文件内标记用于冲突。另请查看this related question