我有一个 Mercurial 存储库,其中有四个分支。一个是“公共(public)”分支,其他三个是“特定”分支,其中包含一些应用于公共(public)分支的外观更改。其中一项外观更改包括重命名一些文件。
所以公共(public)分支有“file.txt”,第一个特定分支有“file-01.txt”,这是同一个文件,用于相同的目的,但名称不同,内容略有不同。它在特定分支上重命名为 file-01.txt,并且“hg log -f file-01.txt”正确显示了重命名之前的历史记录。
当我在公共(public)分支上对 file.txt 进行更改时,我需要能够将该更改 merge 到特定分支上的 file-01.txt 中。但 Mercurial 不明白这些文件是相同的。它告诉我:
remote changed file.txt which local deleted
use (c)hanged version or leave (d)eleted?
如果我选择“c”,那么我会得到一个新的 file.txt,其中包含公共(public)分支版本中的内容。如果我选择“d”,则根本不会 merge 更改。
我该怎么做才能做到这一点?
编辑:我可以使它在新的测试存储库中正常工作,但不是我的实际存储库。这是我得到的(请注意,rev 118 位于特定分支上,就在原始重命名之前,所以我将再次通过重命名过程来说明):
C:\...> hg update -C 118
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
C:\...> hg merge default
merging file.txt
merging anotherfile.txt
0 files updated, 2 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
所以它可以在没有重命名的情况下工作。但如果我重命名,它会失败:
C:\...> hg update -C 118
2 files updated, 0 files merged, 0 files removed, 0 files resolved
C:\...> hg rename file.txt file-01.txt
C:\...> hg commit -m "renamed"created new head
C:\...> hg merge default
remote changed file.txt which local deleted
use (c)hanged version or leave (d)eleted?
编辑 2:这是我在
hg merge --debug default
的最后一步得到的结果:searching for copies back to rev 115
unmatched files in local:
file-01.txt
all copies found (* = to merge, ! = divergent):
file-01.txt -> file.txtchecking for directory renames
resolving manifests
overwrite None partial False
ancestor 9d979018c2df local f842fdbc252b+ remote 05fc75e480da
anotherfile.txt: versions differ -> m
remote changed file.txt which local deleted
use (c)hanged version or leave (d)eleted?
最佳答案
我最终将问题追踪到历史上的一个特定修订:只要不涉及该修订,我就可以跨重命名 merge 。仍然不确定该修订出了什么问题,但我重新进行了更改并且它现在正在工作。
关于Mercurial:如何将更改 merge 到在另一个分支中重命名的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029410/