我们似乎搞砸了一些HG配置。
合并时我们会看到以下几个条目:
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链接到“新文件”。你怎么能打破这个链接?
答案 0 :(得分:3)
事后你不能破坏链接。当你(很可能)做了
时创建了这个链接$ hg rename MyFile.java NewFileA.java
在一个分支中,有人做了
$ hg rename MyFile.java NewFileB.java
另一个。合并两个分支时,最终会同时使用NewFileA.java
和NewFileB.java
。有些人可能会认为是冲突,因此就是警告。
你也可能
$ hg copy MyFile.java NewFileA.java
$ hg copy MyFile.java NewFileB.java
并故意这样做。在这种情况下,没有冲突,警告是不必要的。由于hg rename X Y
与hg copy X Y; hg remove X
相同,Mercurial无法在内部区分这两种情况。有关hg copy
真正做什么的信息,请参阅my other answer。
所以,别担心,没有什么搞砸了。合并后,您将不会再次看到警告 - 仅当您与MyFile.java
仍然存在的分支合并时,才会显示警告。
答案 1 :(得分:1)
除非有一些我不知道的负面反响,否则你可以通过删除或忘记无意的复制目标文件来破解链接,提交,然后重新添加文件(具有相同的内容)。对原始复制源的更改不会合并到重新添加的文件中。
在Mercurial 3.7.2中,我已经能够重现后续合并(不仅仅是第一次合并)对复制目标应用更改,这与文档相反,尽管我还没有挖到这进一步。这里我指的是合并到提交副本的分支,而不是另一个方向。