Mercurial总是使用外部合并工具,当合并的两个分支对同一文件有更改时?Mercurial和合并工具?
或者首先看它是否可以合并文件本身,并且只有在外部工具无法合并的情况下才能进行合并?
的原因,我问的是,我(再次)重新读取tutorial written by Joel Spolsky on Mercurial一件事,他说,比较颠覆和Mercurial如何合并的时候是:
相比之下,而我们在Mercurial分开工作,Mercurial正在忙于保存一系列变更集。所以,当我们想要将我们的代码合并在一起时,Mercurial实际上拥有更多的信息:它知道我们每个人都改变了什么,并且可以重新应用这些改变,而不仅仅是看最终产品,并试图猜测如何把它们一起。
只是,我的经验告诉我,当两个分支对同一个文件进行更改时,似乎涉及外部合并工具。因此,这不会导致上述观点不正确吗?
或者我应该解释为如下:
- 颠覆仅合并这两个分支的最终状态,并有更多的工作在一个单元
- 水银合并每个单独变更,这使得做它与更小的变化单位一起工作,合并成功的可能性更高
有人可以对此有所了解吗?
编辑:我举一个例子:
@echo off
setlocal
if exist repo rd /s /q repo
md repo
cd repo
hg init .
rem --- version 0 ---
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg add test.txt
hg commit -m "v0"
rem --- version 1 ---
echo 1 >test.txt
echo 2 v1 >>test.txt
echo 3 >>test.txt
echo 4 >>test.txt
echo 5 >>test.txt
hg commit -m "v1"
rem --- version 2 ---
hg update 0
echo 1 >test.txt
echo 2 >>test.txt
echo 3 >>test.txt
echo 4 v2 >>test.txt
echo 5 >>test.txt
hg commit -m "v2"
rem --- merge ---
hg update 1
hg merge 2
这首先创建具有下列内容的文件:
1
2
3
4
5
然后它更改为:
1
2 v1
3
4
5
然后,它返回到初始版本(变更),它改变为:
1
2
3
4 v2
5
然后,它试图将二者合并。
现在,根据(当前)单个答案,这应该不会造成问题,因为这些更改没有冲突。
但是,在这一点上,Beyond Compare(我的外部合并工具)被调用。
请看我编辑的问题 – 2010-07-09 19:50:05
对不起,我在编辑,你也是。现在应该更清楚了。 mergetool调用的标准是对同一个文件的更改,这是非常合理的。 – 2010-07-09 19:54:15