2013-07-01 44 views
1

我在將一堆文件移動到各個文件夾中後合併兩個分支時出現了一個奇怪的結果。例如,最初我在main分支的根:爲什麼hg合併保留移動文件的兩個副本?

(main) 
|-run.py 

我做了一個新的分支(移動)在我身邊感動了很多文件(連同hg mv):

(moves) 
|-bin/ 
    |-run.py 

合併兩個分支(hg up main && hg merge moves)時,我得到了一個意外的結果(至少對我而言)。基本上是相同的文件出現在的main分支在兩個位置:

(main) 
|-run.py 
|-bin/ 
    |-run.py 

如果我這樣做,在一個簡化的測試,我得到我期望的結果:

hg init test 
cd test 
touch file_a 
hg add file_a 
hg ci -m 'added file_a' 
hg branch movement 
mkdir files 
hg mv file_a files 
hg ci -m 'moved file_a' 
hg up default 

此時ls顯示單文件file_a

(default) 
|-file_a 

合併hg merge movement後,如我所料,file_a是文件夾files並沒有根了。

(default) 
|-files/ 
    |-file_a 

我迷路了,試圖找出爲什麼我沒有得到與我的真實存儲庫相同的結果。

UPDATE

掘善變的日誌,看什麼改變:

>hg status --change 457 -C 
A bin/run.py 
    run.py 
R run.py 

所以在我看來,該文件被移動和移動註冊。合併後,當兩個文件都存在時,我只能在主目錄中獲得run.py的日誌(hg log -f)。對於bin/run.py它打印:abort: cannot follow file not in parent revision: "bin/run.py"。但是,在我提交合並後,hg log -f適用於這兩個文件。

回答

1

由於您的簡化測試顯示這不是一個正確的行爲。 我會檢查移動分支中run.py文件的修訂歷史記錄,以查看它是否具有移動的信息。

+0

在上面添加了一些日誌信息。 – numentar

+0

這真的很奇怪。當比較兩個文件的hg log命令的輸出時,你能看到一些奇怪的東西嗎? –

+0

唯一的區別是,當我重命名文件時,原始run.py的日誌會返回到修訂版。對於bin/run.py,它還顯示移動後所做的更改。看起來不知怎麼文件已被複制,儘管Mercurial已經註冊了它的文件是分開的東西。我做了一個乾淨的版本庫,並開始了一個新的回購。不能在這方面浪費太多時間。感謝您的輸入! – numentar

0

最新的Mercurial版本(2.7)修復了我的問題。可能是由this bug造成的。