在将一堆文件移动到各种文件夹后合并两个分支时,我得到了一个奇怪的结果。例如,最初我在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
适用于这两个文件。
答案 0 :(得分:1)
由于您的简化测试表明这不是一个正确的行为。 我会检查move分支中run.py文件的修订历史记录,看看它是否有移动它的信息。
答案 1 :(得分:0)
最新的Mercurial版本(2.7)解决了我的问题。可能是由this bug造成的。