Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 移动/重命名后Mercurial diff不工作_Version Control_Mercurial_Diff_Dvcs_Rename - Fatal编程技术网

Version control 移动/重命名后Mercurial diff不工作

Version control 移动/重命名后Mercurial diff不工作,version-control,mercurial,diff,dvcs,rename,Version Control,Mercurial,Diff,Dvcs,Rename,将文件移动到另一个目录后,我无法再显示两个修订版之间的差异。例如: 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 1667558

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

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
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
这正是我所期望的。但是,当我现在将文件“a”移动到目录“b”中时:

结果是什么都没有(根本没有输出)。我还尝试使用git Giff算法:

hg diff --git -r 0 -r 1 a
同样,根本没有输出。日志似乎正常:

hg log --follow 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
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不工作吗?非常感谢您的帮助。

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


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

对于今天的Mercurial来说,这是很困难或不可能的。我想你能得到的最接近的是

hg log --follow --patch -r 1 a
其中,Mercurial将在显示差异之前向后跟踪副本(
--follow
),然后再显示差异(
--patch

一般来说,Mercurial不跟踪文件标识,它只跟踪文件名。当您按修订号查找信息时,Mercurial将首先查找该修订,然后查找该修订中的任何文件名。因此,
hg cat-r0a
将为您提供与

hg update -r 0
cat a

i、 例如,结果独立于当前的工作目录父目录。

BTW:我使用的是Mercurial 2.2-rcI稍微编辑了一个问题:Mercurial不跟踪目录,所以当
b
为空目录时,
hg add b
不会做任何事情。对。这听起来不仅合理,而且似乎也回答了我的问题。不幸的是,这并不能解决我的问题。从CVS转换到Mercurial后,有一个目录包含一堆文件,这些文件应该位于根文件夹中。现在,如果不丢失直接可访问的历史记录(通过MecurialClipse),我就无法将它们移动到根文件夹中。也就是说,我想通过“右键单击”-->团队-->历史-->“选择两个修订”->“右键单击”->“相互比较”访问Eclipse中的修订差异。再次感谢Martin。这就解释了这种行为。通过log-patch解决问题对于控制台来说很好。如果我有时间,我会调查MercurialClipse,看看是否有可能在这项工作中进行黑客攻击。