2012-04-23 61 views
5

将文件移动到另一个目录后,我无法再显示两个修订版之间的差异。例如: -移动/重命名后Mercurial diff不起作用

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 

再次,根本没有输出。该日志似乎是OK:

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 

有任何人知道为什么的差异是不动的文件后的工作?非常感谢您的帮助。

+0

顺便说一下:我正在使用Mercurial 2.2-rc – meisterplanlos 2012-04-23 09:21:09

+0

我稍微编辑了这个问题:Mercurial不跟踪目录,所以当'b'是一个空目录时'hg add b'不会做任何事情。 – 2012-04-23 10:45:13

+0

@马丁:谢谢。 – meisterplanlos 2012-04-23 11:26:36

回答

3

今天的Mercurial很难或不可能实现。我认为你可以得到最接近的是

hg log --follow --patch -r 1 a 

其中水银会显示DIFF(--patch)之前跟踪的副本向后(--follow)。

一般来说,Mercurial不会跟踪文件标识,它只跟踪文件名。当您按修订号查找信息时,Mercurial将首先查找修订版,然后查找该修订版中的任何文件名。所以hg cat -r 0 a会给你同样的结果

hg update -r 0 
cat a 

即,结果是独立于当前工作目录父。

+0

再次感谢,马丁。这解释了这种行为。通过日志 - 补丁工作对控制台很好。如果我有时间,我会研究MercurialEclipse,看看是否有可能在这个工作中破解。 – meisterplanlos 2012-04-23 14:46:48

0

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

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

+0

没错。这不仅听起来合理,而且似乎回答了我的问题。不幸的是,这并没有解决我的问题。从CVS转换到Mercurial后,有一个目录包含一堆文件,而该文件应该位于根文件夹中。现在,我不能将它们移动到根文件夹中,而不会丢失可直接访问的历史记录(通过MecurialEclipse)。即我想通过“右键单击” - >团队 - >历史 - >“选择两个修订” - >“右键点击” - >“相互比较”来访问Eclipse中的修订版本差异。 – meisterplanlos 2012-04-23 11:32:05