2012-08-29 80 views
1

我們似乎搞砸了我們的一些HG配置。打破Mercurial文件「鏈接」?

合併時,我們看到一些這些條目:

warning: detected divergent renames of core/src/main/java/x/y/z/MyFile.java to: 
core/src/main/java/x/y/z/NewFileA.java 
core/src/main/java/x/y/z/NewFileB.java 

MyFile的不應該被鏈接到「新文件」。你怎麼能打破這個鏈接?

回答

3

事實之後,你不能斷開鏈接。當你(最有可能)的一個分支取得

$ hg rename MyFile.java NewFileA.java 

鏈接創建並有人做

$ hg rename MyFile.java NewFileB.java 
在另一個

。合併這兩個分支時,您最終將得到NewFileA.javaNewFileB.java。有些人可能認爲這是衝突,因此是警告。

也有可能是你做

$ hg copy MyFile.java NewFileA.java 
$ hg copy MyFile.java NewFileB.java 

和故意這樣做的。在這種情況下,不存在衝突,並且不需要警告。由於hg rename X Yhg copy X Y; hg remove X相同,因此Mercurial無法在內部區分這兩種情況。有關hg copy的確實信息,請參閱my other answer

所以,不要擔心,沒有什麼是搞砸了。合併後,您不會再看到警告 - 只有在合併MyFile.java仍存在的分支時纔會出現此警告。

+0

是的,我認爲我們無意中做了hg copy - 我認爲IntelliJ(啓用HG集成)在我「複製」文件時執行了此操作。 如果我們更改MyFile然後進行合併,HG現在會嘗試將更改合併到「新文件」中嗎? 我原以爲有一種方法來打破鏈接..哦,好吧。 –

+0

只有在你還有'MyFile'的分支和一個分支之間的合併,Mercurial纔會嘗試將'MyFile'變更復制到兩個副本中。之後,你不會看到任何特殊的「魔法鏈接」已被打破。 –

1

除非有,我是不知道的一些負面反響,你可以做一個刪除斷開鏈接或無意的複製目標文件的忘了,犯了出來,然後重新添加文件(與相同的內容)。對原始複製源的更改不會合併到重新添加的文件中。

在水銀3.7.2我已經能夠重現隨後合併(不只是第一合流)將更改應用到複製目標,這是違背的文件,雖然我沒有挖成這進一步。這裏我指的是合併副本被提交的分支,而不是其他方向。