【发布时间】:2013-07-01 20:51:10
【问题描述】:
在将一堆文件移动到不同文件夹后合并两个分支时,我得到了一个奇怪的结果。例如,最初我在main 分支的根目录中:
(main)
|-run.py
我创建了一个新分支(moves),在其中我移动了很多文件(使用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
所以在我看来,文件已被移动并且已注册。合并后,当两个文件都存在时,我只能在主目录中获取run.py 的日志(hg log -f)。对于bin/run.py,它会打印:abort: cannot follow file not in parent revision: "bin/run.py"。但是,在我提交合并后,hg log -f 对这两个文件都有效。
【问题讨论】: