6

ファイルを別のディレクトリに移動した後、2 つのリビジョン間の違いを表示できなくなりました。例えば:

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

ファイルを移動した後に差分が機能しない理由を誰か知っていますか? よろしくお願いいたします。

4

2 に答える 2

6

これは、今日の Mercurial では困難または不可能です。私はあなたが得ることができる最も近いと思います

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

--followここで、Mercurial は差分を表示する前に( ) コピーを後方に追跡します( --patch)。

通常、Mercurial はファイル IDを追跡せず、ファイル名のみを追跡します。リビジョン番号で情報を検索すると、Mercurial は最初にリビジョンを検索し、次にそのリビジョン内のファイル名を検索します。したがってhg cat -r 0 a、次の場合と同じ結果が得られます

hg update -r 0
cat a

つまり、結果は現在の作業ディレクトリの親から独立しています。

于 2012-04-23T11:30:35.720 に答える
0

b/aリビジョン 1 またはリビジョン 0 には存在しないためだと思います。フォルダーhg diff -r 0 -r 4内からコマンドを実行すると、期待どおりの出力が生成されるはずです。b

作業コピーのルートから実行するhg diff -r 0 -r 1 aと、期待される出力も表示されるはずです。

于 2012-04-23T10:01:00.077 に答える