为什么hg merge会保留移动文件的两个副本?

时间:2013-07-01 20:51:11

标签: mercurial merge

在将一堆文件移动到各种文件夹后合并两个分支时,我得到了一个奇怪的结果。例如,最初我在main分支的根目录中:

(main)
|-run.py

我创建了一个新分支(移动),其中我移动了很多文件(使用hg mv):

(moves)
|-bin/
   |-run.py

合并两个分支(hg up main && hg merge moves)时,我得到了意想不到的结果(至少对我而言)。基本上,同一文件出现在两个位置的main分支中:

(main)
|-run.py
|-bin/
   |-run.py

如果我在简化测试中这样做,我会得到我期望的结果:

hg init test
cd test
touch file_a
hg add file_a
hg ci -m 'added file_a'
hg branch movement
mkdir files
hg mv file_a files
hg ci -m 'moved file_a'
hg up default

此时ls显示单个文件file_a

(default)
|-file_a

合并hg merge movement后,正如我所料,file_a位于文件夹files中,而不再位于根目录中。

(default)
|-files/
   |-file_a

我迷失了,试图找出为什么我的真实存储库没有得到相同的结果。

更新

挖掘mercurial日志并查看更改内容:

>hg status --change 457  -C
A bin/run.py
  run.py
R run.py

所以在我看来文件已移动并且移动已注册。合并后,当两个文件都存在时,我只能获取主目录中hg log -f的日志(run.py)。对于bin/run.py,它会打印:abort: cannot follow file not in parent revision: "bin/run.py"。但是,在我提交合并之后,hg log -f适用于这两个文件。

2 个答案:

答案 0 :(得分:1)

由于您的简化测试表明这不是一个正确的行为。 我会检查move分支中run.py文件的修订历史记录,看看它是否有移动它的信息。

答案 1 :(得分:0)

最新的Mercurial版本(2.7)解决了我的问题。可能是由this bug造成的。