Wie erhalte ich eine bestimmte Version einer Datei in Mercurial?

114

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

Codismus
quelle
@ Omnifarious: Ich habe eine stabile Version einer Datei festgeschrieben. Dann arbeitete ich weiter an der Datei, merkte aber bald, dass ich die letzte "gute" Version brauche. Dies kann durch Update in SVN erfolgen, aber wenn ich hg Update versuche, heißt es "0 Dateien ..."
Codism

Antworten:

153

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

djc
quelle
Ja, genau das will er. :-)
Omnifarious
9
oder einfach hg <Dateiname> zurücksetzen, wenn Sie Ihre aktuellen Änderungen verwerfen möchten und die neuesten Daten erhalten
möchten
@BlackTigerX Ohne die Revision wird eine nicht geänderte Datei nicht auf irgendetwas zurückgesetzt, auch wenn es sich nicht um die zuletzt festgeschriebene Version handelt. Ich benutze dies manchmal, um Dateien zwischen den Revisionen auszuwählen, daher ist dies wichtig.
user2864740
83

Wie DJC sagte, revertändert sich eine Datei an Ort und Stelle, um einer vorherigen Revision zu entsprechen. Wenn Sie möchten, dass es nicht vorhanden ist, können Sie es verwenden hg cat -r revisionid filename(natürlich durch Ersetzen von Revisions-ID und Dateiname), um die Datei an stdout auszugeben, das zum Umleiten an einen beliebigen Ort geeignet ist.

Ry4an Brase
quelle
4
purrrfect, genau das, was ich mir gewünscht habe.
Yota
Genial, es ist immer schön so etwas zu hören.
Ry4an Brase
24

hg revertlöst in der Tat dieses Problem. Aber ich denke, Sie sind verwirrt über ein breiteres Spektrum von Dingen als nur die Antwort auf Ihre Frage und möchten versuchen, eine umfassendere Antwort zu geben.

hg updateist ein vollständiger Repository-Befehl und funktioniert nicht mit einzelnen Dateien. Es ist anders als die Subversion svn updateauf diese Weise. Wenn Sie dies tun hg --help update, können Sie sehen, dass dies der Fall ist, da der Befehl kein Dateiargument akzeptiert. Es kann verwendet werden, um Ihr gesamtes Repository in einen bestimmten Snapshot zu verschieben, kann jedoch nicht verwendet werden, um dies auf nur eine Datei zu übertragen.

Wenn Sie tippen hg --help eingeben, wird eine Liste der Befehle angezeigt. Es ist eine ziemlich große und etwas entmutigende Liste, aber wenn Sie sie durchlesen, finden Sie diese Zeile:

revert       restore individual files or directories to an earlier state

Wenn Sie nur den letzten Status zu Vergleichszwecken verwenden möchten, gibt es einen anderen Befehl, an dem Sie interessiert sein könnten, und das ist 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 zuvor bekannte gute Version Ihrer Datei und die alte Version nebeneinander vergleichen.

Der Grund, warum Mercurial einen separaten updateBefehl hat, ist, dass es möglich ist, in Mercurial etwas zu tun, was in Subversion unmöglich ist. Sie könnenupdate zu einer früheren Version wechseln, Änderungen vornehmen und dann festschreiben. Dadurch wird eine Verzweigung erstellt. Der updateBefehl bewirkt auch, dass die übergeordnete Version des aktuellen Arbeitsverzeichnisses sowie der Inhalt aller Dateien in diesem Verzeichnis in die Versionen dieser übergeordneten Version geändert wird.

Das bedeutet revert , dass der Inhalt einer Datei (oder sogar des gesamten Repositorys, wenn Sie dem Befehl die richtigen Argumente geben) geändert wird, die übergeordnete Version der aktuellen Arbeitskopie jedoch unverändert bleibt.

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

In Subversion sind Revisionen ein streng linearer Verlauf. Mercurial erstellt im Handumdrehen Zweige und lässt sich fast genauso einfach zusammenführen. Revisionen bilden eine DAG, keine streng lineare Progression.

Allgegenwärtig
quelle
13

So extrahieren Sie eine bestimmte Version einer bestimmten Datei unter Windows:

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

Hier ist 9 die Revisionsnummer.

Oder noch besser:

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

Kam hierher und versuchte die vorherige Version zu bekommen, also hier ist der genaue Befehl:

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