Generieren einer Liste, welche Dateien zwischen den hg-Versionen geändert wurden

118

Ich möchte eine Liste der Dateien erstellen, die zwischen zwei Revisionen in einem bestimmten Verzeichnis in Mercurial geändert wurden.

Insbesondere interessiert mich nicht, was sich geändert hat, sondern welche Dateien sich in diesem Verzeichnis geändert haben.

Angenommen, zwischen thenund otherthenhaben sich nur 2 Dateien geändert:

>hg hypothetical-command -r then:otherthen
foo.baz
bar.baz
>

Was ist der hypothetische Befehl? Ich habe Diff und Log ausprobiert, aber ich kann nicht sehen, wie ich sie davon überzeugen kann: Entweder bekomme ich den Patch (Diff) oder ich bekomme das gesamte Repo (Log).

Paul Nathan
quelle

Antworten:

166
hg status --rev x:y

wo xund ysind gewünschte Revisionsnummern (oder Tag- oder Filialnamen).

Wenn Sie das Terminal in Windows verwenden, fügen Sie hinzu hg status --rev x:y> your-file.txt, um die Liste in einer Datei zu speichern.

Alemjerus
quelle
3
Um nur Änderungen im aktuellen Verzeichnis zu sehen:hg status --rev x:y .
Benutzer
14
Um die Änderungen in der letzten Revision zu sehen: hg status --rev .^
Kunigami
8
Um nur die Liste der Dateinamen (und kein Präfixzeichen, das die Art der Änderung angibt) zu erhalten, fügen Sie Folgendes hinzu -n: dhhg status --rev x:y -n
Cheetah
1
hg status --change .listet die geänderten Dateien in .- gleiche Liste wie, hg status --rev .^aber direkter
Metaxis
14

Status ist das, was Sie brauchen.

Abhängig davon, was Sie unter "zwischen zwei Revisionen" verstehen, können Sie auch den Bereich " x :: y " (DAG - Directed Acyclic Graph) verwenden.

Bei parallelen Änderungssätzen,

1--2---4 \---3

hg status --rev 1:4 würde zurückgeben (1,2,3,4), dh alles zwischen und einschließlich der Endpunkte, gemäß der lokalen, numerischen rev . Dies könnte (und wird höchstwahrscheinlich) andere Ergebnisse in anderen - wenn auch verwandten - Repositories zurückgeben!

hg status --rev 1::4würde (1,2,4) zurückgeben, dh die Endpunkte und alle Änderungssätze, die Nachkommen von '1' UND Vorfahren von '4' sind.

Der letztere Fall, x :: y, ist normalerweise in realen Anwendungen nützlicher. Dies erhalten Sie über TortoiseHg \ Visual Diff.


> hg help revsets:

"x :: y" Ein DAG-Bereich, dh alle Änderungssätze, die Nachkommen von x und Vorfahren von y sind, einschließlich x und y selbst. Wenn der erste Endpunkt weggelassen wird, entspricht dies "Vorfahren (y)", wenn der zweite weggelassen wird, entspricht dies "Nachkommen (x)".

martind2112
quelle
1
Möglicherweise müssen Sie den Befehl explizit einfügen, damit Ihre Antwort nicht vom anderen abhängt und narrensicherer ist. So etwas wie "Ja, Status ist das, was Sie brauchen. Zum Beispiel hg status --rev x::y".
PhoneixS