7 Stimmen

Mercurial diff funktioniert nach dem Verschieben/Umbenennen nicht.

Nachdem ich eine Datei in ein anderes Verzeichnis verschoben habe, kann ich die Unterschiede zwischen zwei Revisionen nicht mehr anzeigen. Zum Beispiel:

hg init

touch a
hg add a
hg ci -m "Hinzugefügt 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

Ergebnisse in:

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

was ich erwartet hatte. Aber wenn ich die Datei "a" jetzt in ein Verzeichnis "b" verschiebe:

mkdir b
hg mv a b/a
hg ci -m "A in b verschoben"
cd b
hg diff -r 0 -r 1 a

führt dies zu nichts (keine Ausgabe überhaupt). Ich habe auch versucht, den Git Diff Algorithmus zu verwenden:

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

Auch hier gibt es überhaupt keine Ausgabe. Das Protokoll scheint in Ordnung zu sein:

hg log --follow a

Ergebnisse in:

changeset:   4:cb8185829bfd
tag:         tip
user:        XXXXXXXXXXXXXXXXXXXXXXXXXXXX
date:        Mon Apr 23 09:08:12 2012 +0000
summary:     A in b verschoben

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:     Hinzugefügt a

Hat jemand eine Idee, warum der Diff nicht funktioniert, nachdem eine Datei verschoben wurde? Ihre Hilfe wird sehr geschätzt.

6voto

Martin Geisler Punkte 71257

Dies ist mit dem heutigen Mercurial schwierig oder unmöglich. Ich denke, das Beste, was du erreichen kannst, ist

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

wo Mercurial die Kopien rückwärts verfolgen wird (--follow), bevor es die Änderungen zeigt (--patch).

Allgemein verfolgt Mercurial keine Dateiidentitäten, sondern nur Dateinamen. Wenn du Informationen anhand der Revisionsnummer abrufst, wird Mercurial zuerst die Revision suchen und dann alle Dateinamen in dieser Revision suchen. Also wird hg cat -r 0 a dasselbe Ergebnis liefern wie

hg update -r 0
cat a

d. h. das Ergebnis ist unabhängig vom aktuellen Arbeitsverzeichnis-Dachverzeichnis.

0voto

Steve Kaye Punkte 6192

Ich denke, dass es daran liegt, dass b/a in Revision 1 oder Revision 0 nicht existiert. Wenn Sie den Befehl hg diff -r 0 -r 4 innerhalb des Ordners b ausführen, sollte er die erwartete Ausgabe produzieren.

Wenn Sie hg diff -r 0 -r 1 a von der Wurzel des Arbeitskopiers ausführen, sollte es auch die erwartete Ausgabe anzeigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X