1

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

4

2 回答 2

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

并且是故意这样做的。在这种情况下,没有冲突,不需要警告。Mercurial 无法在内部区分这两种情况,因为hg rename X Y与 相同hg copy X Y; hg remove X。有关真正作用的信息,请参阅我的其他答案。hg copy

所以,别担心,什么都没有。合并后,您将不会再次看到警告 - 仅当您与MyFile.java仍然存在的分支合并时才会出现警告。

于 2012-08-29T15:45:02.130 回答
2

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

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

于 2016-06-02T22:19:12.347 回答