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
@ 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).
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.
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.
Antworten:
Ich denke, Sie möchten
hg revert -r<rev> <file>
(dies ändert die Datei so, wie sie bei der angegebenen Revision war).quelle
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 verwendenhg 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.quelle
hg revert
lö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 update
ist ein vollständiger Repository-Befehl und funktioniert nicht mit einzelnen Dateien. Es ist anders als die Subversionsvn update
auf diese Weise. Wenn Sie dies tunhg --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: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
update
Befehl 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. Derupdate
Befehl 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.
quelle
So extrahieren Sie eine bestimmte Version einer bestimmten Datei unter Windows:
Hier ist 9 die Revisionsnummer.
Oder noch besser:
quelle
Kam hierher und versuchte die vorherige Version zu bekommen, also hier ist der genaue Befehl:
quelle