2012-04-20 59 views
1

我一直在使用Mercurial版本控制系統已經有幾段時間了,我已經看到系統警告過我有關不同的重命名。爲什麼mercurial會提醒我不同的重命名?

我所做的是讓一個大文件的兩個不同的後代。例如,我有一個名爲HttpRequest的類,它是CGI.pm的包裝。後來,當我決定轉向PSGI協議時,我已經制作了這個文件的兩個副本,即Cgi.pmPsgi.pm。原始類繼續存在,並且隨着從中繼承而來的新類變得抽象。

我一直認爲這是處理這種情況的首選方式,因爲每個文件都保留了它所基於的文件的歷史記錄。但是當我將更改推送到遠程服務器時,它告訴我:

remote: adding changesets 
remote: adding manifests 
remote: adding file changes 
remote: added 2 changesets with 2 changes to 2 files (+1 heads) 
remote: warning: detected divergent renames of lib/HttpRequest.pm to: 
remote: lib/HttpRequest/Cgi.pm 
remote: lib/HttpRequest/Psgi.pm 

這是壞的嗎?我應該以其他方式做嗎?

回答

2

看起來問題不在於您製作了相同源文件的版本化副本,而是存在兩個更改集,其中文件每次都重命名爲不同的名稱,而這些更改集不在同一行發展。這一觀察結果是基於你的拉力創造了一個新的頭。

所以在這種情況下,Mercurial是警告你,拉創造了一個新頭,因此您的回購有兩個頭內每一個CGI.pm已重命名爲不同的文件。因此,如果您嘗試將它們合併成一個,您必須決定應該保留哪些更改。

防止這種情況最簡單的方法是複製原始文件而不是重命名它。更確切地說,你可以重新命名它,但是在所有後續的場合,你必須複製它(顯然,如果你在同一行開發中這樣做,並且如果你不想但在以後打算合併發散行) 。

你可能也想看看Mercurial的權威指南relevant section

+0

您提到的'+1頭部'出現在這裏,因爲我一直在功能分支中工作,然後將它與'default'分支合併。這個添加的頭只是在合併後添加到功能分支的結束變更集。 但奇怪的是,我不能用乾淨的存儲庫重現此警告,所以你是對的,這不是由同一個文件的兩個副本造成的。我一定犯了錯誤,然後忘了它。 – 2012-04-20 12:45:58

相關問題