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.

Sie müssen nicht immer eine Versionsnummer angeben — Mercurial hat einige Tricks die ihnen helfen können.