2013-06-05 36 views
6

背景:打破水銀中的文件連接後壞的文件分割

起初有一個文件base.c,而該文件是在只有一個分支Base庫。

Base被分支以形成Extended-分支。然後,這個新分支對base.c進行了一些更改。

如果在的文件Base中修復了錯誤,則它們將合併到Extended

事實證明,在Extended分支中添加太多內容到base.c並不是一個好主意,因此文件被複制到ext.c。然後,從base.cBase功能從ext.c刪除大多數Extended添加。所以在這一點base.cExtended是非常類似於Base

問題:

當文件被分割,水銀獲悉,ext.cbase.c副本,因爲他們有着共同的歷史。不幸的是,這不是一個好主意。

現在,如果錯誤被固定在Base分支合併爲Extended,水銀認爲,這些變化應同時適用於base.cext.c,即使後者是不再有任何相似之處,前者。這使合併非常煩人。

有沒有辦法告訴Mercurial ext.c應該不再與base.c一樣?一種解決方案是用新文件替換ext.c,但不會遵循歷史記錄。

+0

有趣的問題。我假設你用'hg copy'製作了副本? – icabod

+0

是使用'hg copy'。 – user694733

+4

如果你'hg忘記ext.c',然後'hg add'它作爲一個新文件,你可能會斷開連接......但是這樣你就會失去所有的歷史記錄。但是,您可以添加一個_earlier_版本的'ext。(也許甚至在重命名之前),並重播(嫁接)它是歷史。 – alexis

回答

2

您可以斷開連接hg forget ext.c,然後hg add ext.c作爲新文件。但是,如果您使用最新修訂版ext.c來做到這一點,那麼您將失去迄今爲止的所有歷史記錄。

您可以改爲添加早期版本的ext.c,甚至可能在重命名之前,重播(移植)其歷史記錄。您可以添加的ext.c歷史作爲一個分支過去的版本,並將其合併到提示:

---o---o---o---(tip)--(merge) 
    \    /
    e---e---e ... e 

也許不要緊,你只需要添加的ext.c歷史到當前tip

---o---o---o---(tip)--e--e--e--e 

這些方法無論涉及任何歷史重寫(的ext.c「被遺忘」的版本剛剛離開一個死衚衕),所以應該有與傳播的變化沒有問題。