打破Mercurial文件“链接”?

时间:2012-08-29 15:02:16

标签: mercurial

我们似乎搞砸了一些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链接到“新文件”。你怎么能打破这个链接?

2 个答案:

答案 0 :(得分: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仍然存在的分支合并时,才会显示警告。

答案 1 :(得分:1)

除非有一些我不知道的负面反响,否则你可以通过删除或忘记无意的复制目标文件来破解链接,提交,然后重新添加文件(具有相同的内容)。对原始复制源的更改不会合并到重新添加的文件中。

在Mercurial 3.7.2中,我已经能够重现后续合并(不仅仅是第一次合并)对复制目标应用更改,这与文档相反,尽管我还没有挖到这进一步。这里我指的是合并提交副本的分支,而不是另一个方向。