移动/重命名后,Mercurial差异比较不起作用

7

将文件移动到另一个目录后,我无法再显示两个版本之间的差异。例如:

hg init

touch a
hg add a
hg ci -m "Added a"

echo "Bli" >> a
hg ci -m "Bli"
echo "Bla" >> a
hg ci -m "Bla"
echo "Blub" >> a
hg ci -m "Blub"

hg diff -r 0 -r 1 a

结果为:

diff -r 8603b08f5a64 -r 16675581549e a
--- a/a Mon Apr 23 09:03:25 2012 +0000
+++ b/a Mon Apr 23 09:03:25 2012 +0000
@@ -0,0 +1,1 @@
+Bli

这正是我所期望的。但是,当我现在将文件 "a" 移动到目录 "b" 中时:

mkdir b
hg mv a b/a
hg ci -m "Moved a into b"
cd b
hg diff -r 0 -r 1 a

这导致没有任何输出。我还尝试使用git Giff算法:

hg diff --git -r 0 -r 1 a

再次运行时,没有任何输出。日志记录似乎正常:

hg log --follow a

结果显示:

changeset:   4:cb8185829bfd
tag:         tip
user:        XXXXXXXXXXXXXXXXXXXXXXXXXXXX
date:        Mon Apr 23 09:08:12 2012 +0000
summary:     Moved a into b

changeset:   3:4d1ba89885c3
user:        XXXXXXXXXXXXXXXXXXXXXXXXXXXX
date:        Mon Apr 23 09:03:26 2012 +0000
summary:     Blub

changeset:   2:e9126dbb50b2
user:        XXXXXXXXXXXXXXXXXXXXXXXXXXXX
date:        Mon Apr 23 09:03:26 2012 +0000
summary:     Bla

changeset:   1:16675581549e
user:        XXXXXXXXXXXXXXXXXXXXXXXXXXXX
date:        Mon Apr 23 09:03:25 2012 +0000
summary:     Bli

changeset:   0:8603b08f5a64
user:        XXXXXXXXXXXXXXXXXXXXXXXXXXXX
date:        Mon Apr 23 09:03:25 2012 +0000
summary:     Added a

有人知道为什么移动文件后diff不起作用吗?非常感谢您的帮助。

顺便说一下:我正在使用Mercurial 2.2-rc。 - meisterplanlos
我稍微修改了问题:Mercurial不跟踪目录,因此当b是空目录时,hg add b不会做任何事情。 - Martin Geisler
2个回答

6
今天的Mercurial还无法做到这一点,我认为你能够接近的是:
hg log --follow --patch -r 1 a

Mercurial将在显示差异(--patch)之前向后跟踪拷贝(--follow)。

通常情况下,Mercurial不会跟踪文件标识符,它只会跟踪文件名。当您按版本号查找信息时,Mercurial会先查找版本,然后查找该版本中的任何文件名。因此,hg cat -r 0 a将给您与其相同的结果。

hg update -r 0
cat a

即结果与当前工作目录的父目录无关。

再次感谢,马丁。这解释了这种行为。通过日志--patch的变通方法对控制台很好用。如果我有时间,我会研究一下MercurialEclipse,并看看是否有可能在这个变通方法中进行修改。 - meisterplanlos

0

我认为这是因为在版本1或版本0中不存在b/a。如果您在b文件夹内执行命令hg diff -r 0 -r 4,它应该会产生预期的输出。

如果您在工作副本的根目录中执行hg diff -r 0 -r 1 a,它也应该显示预期的输出。


好的。这不仅听起来合理,而且似乎回答了我的问题。不幸的是,它并没有解决我的问题。在从CVS转换到Mercurial之后,有一个包含一堆文件的目录,这些文件应该放在根目录中。现在我不能将它们移动到根目录中,否则就会失去直接访问历史记录(通过MecurialEclipse)。也就是说,我想通过Eclipse访问修订差异,方法是“右键单击”-->团队-->历史记录-->“选择两个修订版本”-->“右键单击”-->“相互比较”。 - meisterplanlos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接