Shortcuts für spezifische Revisionen
posted by Steve Losh on October 5, 2009
Etliche Befehle von Mercurial ermöglichen ihnen die Angabe einer bestimmten
Version die behandelt werden soll. Als Beispiel: hg update REV wird die
Arbeitsversion auf die Version REV aktualisieren und hg diff -c REV
wird die Änderungen der Version REV anzeigen.
Die am häufigsten verwendete Möglichkeit um Mercurial die gewünschte Revision
mitzuteilen ist die Verwendung der lokalen Revisionsnummer. Als Beispiel:
hg update 30 wird die Arbeitsversion auf Revision 30 aktualisieren.
Dies ist gut wenn Sie die gewünschte Revisionsnummer kennen (oder mittels
hg log nachschauen wollen). Aber Mercurial bietet noch einige Abkürzungen
die dies einfacher machen.
Hashes
Die Revisionsnummer die Sie meistens verwenden sind nur innerhalb ihres Repository eindeutig. Normalerweise ist dies kein Problem. Aber wenn man mit jemand anderem über eine Revision sprechen will, sollten Sie den eindeutigen Hash verwenden.
Mit hg log können Sie den Hash der Revision nachschlagen — dieser wird direkt
neben der Revisionsnummer angezeigt. Ein Beispiel:
$ hg log -r 30
changeset: 30:f7744f53cf93
...
In diesem Fall ist f7744f53cf93 der Hash den Sie verwenden sollten um mit
anderen Leuten über eine Änderung sprechen wollen.
Tags
Sie können überall wo sie eine Revisionsnummer nutzen auch den Namen eines Tag
verwenden. Wenn Sie einen Tag mit dem Namen 1.0 haben der auf Revision 30
zeigt, bewirkt hg update 1.0 das gleiche wie hg update 30.
Benannte Verzweigungen nutzen
Wenn Sie benannte Verzweigungen (sogenannte Branches die Sie mittels hg branch
branchname erzeugen können) nutzen, kann deren Name als Versionsbezeichnung
verwendet werden. Dies ist die Kurzform für “aktualisiere auf die letzte
Version in der Verzweigung branchname”.
Dies kann sehr hilfreich sein wenn Sie häufig zwischen Verzweigungen hin und her wechseln müssen:
$ hg update feature-branch
... Sie arbeiten an neuer Funktion ...
$ hg commit -m 'Add part of the new feature.'
$ hg update default
... Beheben eines kritischen Fehlers auf dem Hauptentwicklungszweig ...
$ hg commit -m 'Fix the bug that set the servers on fire.'
$ hg update feature-branch
... Zurück zur Arbeit an der neuen Funktion ...
Dies ist auch hilfreich wenn Sie mergen wollen. Denken Sie daran, dass
hg merge auch eine spezifische Revision mit der aktuellen Revision
zusammengeführt werden können:
$ hg update default
$ hg merge --rev feature-branch
$ hg commit -m 'Merge in the new feature.'
Die aktuellen Eltern
Einer der undurchsichtigeren Tricks zur Angabe einer Revision ist die
Verwendung von . um zu sagen “gib mir die Eltern der aktuellen Arbeitskopie”:
$ hg commit -m 'Finish up some changes.'
$ hg log --change .
... zeige die Änderung bei der gerade eingecheckten Revision ...
$ hg diff --rev 12:.
... zeige die Änderungen zwischen Revision 12 und der gerade eingecheckten
Revision ...
$ hg update -C .
... verwerfe alle Änderungen die nicht eingecheckt wurden bleibe dabei aber
auf der aktuellen Revision ...
Die Vorgänger von Tip
Wenn Sie eine negative Nummer als Revision verwenden, bedeutet dies “X
Revisionen vom aktuellen Tip des Repository zurück”. -1 meint Tip selber,
-2 bedeutet die Elternversion von Tip und so weiter.
Dies wird ein wenig heikel sobald Verzweigungen im Spiel sind. So lange Sie aber nur einige Versionen zurück wollen ist es sehr nützlich.
Andere Tricks
Es gibt mehrere Wege um eine Revision zu spezifizieren. Mittels hg help
revisions können Sie mehr erfahren.
Wenn Sie ein Git Benutzer sind der Mercurial ausprobiert und den Syntax
revision^ vermissen, schauen Sie sich parentrevspec Erweiterung an.
Diese erweitert Mercurial um den entsprechenden Syntax zur Angabe einer Revision.