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