2

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

(main)
|-run.py

我创建了一个新分支(moves),在其中我移动了很多文件(with 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,这两个文件都适用。

4

2 回答 2

1

正如您的简化测试所示,这不是正确的行为。我会检查 move 分支中 run.py 文件的修订历史,以查看它是否具有移动的信息。

于 2013-07-05T08:14:21.893 回答
0

最新的 Mercurial 版本 (2.7) 解决了我的问题。可能是由这个错误引起的。

于 2013-08-20T08:46:07.197 回答