wake-up-neo.com

Wie bekomme ich eine bestimmte Version einer Datei in Mercurial?

Ich bin neu bei Mercurial. Kann einfach nicht den richtigen Befehl finden. Versuchte Update/Checkout ohne Glück. Ich verwende ein lokales Repository. Vielen Dank

101
Codism

Ich denke, Sie möchten hg revert -r<rev> <file> (dies ändert die Datei so, wie sie bei der angegebenen Version war).

142
djc

Wie bei djc gesagt, revert ändert eine vorhandene Datei, um sie an eine frühere Version anzupassen. Wenn Sie möchten, dass die Datei nicht installiert wird, können Sie hg cat -r revisionid filename verwenden (natürlich anstelle von revisionid und Dateiname), um die Datei in stdout auszugeben.

79
Ry4an Brase

hg revert löst dieses Problem tatsächlich. Ich denke jedoch, dass Sie über ein breiteres Spektrum von Dingen verwirrt sind als nur die Antwort auf Ihre Frage und möchten umfassender antworten.

hg update ist ein vollständiger Repositorybefehl und funktioniert nicht für einzelne Dateien. Dies ist anders als bei der Subversion svn update. Wenn Sie hg --help update tun, können Sie feststellen, dass dies der Fall ist, da der Befehl kein Argument für eine Datei enthält. Es kann verwendet werden, um Ihr gesamtes Repository zu einem bestimmten Snapshot zu verschieben, aber nicht, um dies nur für eine Datei zu tun.

Wenn Sie hg --help eingeben, wird eine Liste mit Befehlen angezeigt. Es ist eine ziemlich große und etwas beängstigende Liste, aber wenn Sie es durchlesen, finden Sie diese Zeile:

revert       restore individual files or directories to an earlier state

Wenn Sie nur den letzten Status zum Vergleich wünschen, gibt es einen weiteren Befehl, an dem Sie interessiert sein könnten, und zwar hg cat. Auf diese Weise können Sie den Inhalt einer Datei bei einer bestimmten Revision ausdrucken. Sie können dann die Ausgabe in eine andere Datei umleiten. Dann können Sie die bisher bekannte, gute Version Ihrer Datei und die alte Version nebeneinander vergleichen lassen.

Der Grund, warum Mercurial über einen separaten update-Befehl verfügt, besteht darin, dass in Mercurial etwas möglich ist, was in Subversion nicht möglich ist. Sie können update zu einer früheren Version ändern, Änderungen vornehmen und dann ein Commit ausführen. Dadurch wird ein Zweig erstellt. Der Befehl update bewirkt, dass auch die übergeordnete Revision des aktuellen Arbeitsverzeichnisses sowie der Inhalt aller Dateien in diesem Verzeichnis auf die Versionen dieser übergeordneten Revision geändert wird.

Das heißt, revert ändert den Inhalt einer Datei (oder sogar des gesamten Repositorys, wenn Sie dem Befehl die richtigen Argumente geben), lässt jedoch die übergeordnete Revision der aktuellen Arbeitskopie unverändert.

Sie können die übergeordnete Version (oder die Revisionen im Falle einer Zusammenführung) der aktuellen Arbeitskopie mit dem Befehl hg parents ermitteln.

In Subversion sind Revisionen eine streng lineare Entwicklung. Mercurial erzeugt Äste im Handumdrehen, und es ist fast genauso einfach, sie zu verbinden. Revisionen bilden eine DAG, keine streng lineare Progression.

23
Omnifarious

Um eine bestimmte Revision einer bestimmten Datei zu extrahieren, können Sie dies unter Windows tun:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

Hier ist 9 die Versionsnummer.

Oder noch besser:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"
10
user2173353

Kam hier, um die vorherige Version zu erhalten, also hier der genaue Befehl:

hg revert -r .~1 <file>
0
cmcginty