2012-08-29 75 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我已经能够重现随后合并(不只是第一合流)将更改应用到复制目标,这是违背的文件,虽然我没有挖成这进一步。这里我指的是合并副本被提交的分支,而不是其他方向。