Tutorial - Die Vorgeschichte ("History") eines Repositorys erkunden
Wir sind den Anweisungen in GermanTutorialClone gefolgt und haben ein Repository geklont; unsere lokale Kopie heißt my-hello.
Werfen wir einen Blick auf die History dieses Repository. Dazu verwenden wir den log-Befehl. Der zeigt eine Zusammenfassung aller Ereignisse an, die in dem Repository stattgefunden haben, zuerst das jüngste und dann rückwärts durch die Geschichte zu immer älteren Ereignissen.
$ cd my-hello $ hg log changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile changeset: 0:0a04b987be5a user: mpm@selenic.com date: Fri Aug 26 01:20:50 2005 -0700 summary: Create a standard "hello, world" program
Die ausgegebenen Zeilen erfordern eine Erklärung.
Jeder Absatz beschreibt einen einzelnen ChangeSet. Ein ChangeSet ist die Änderung einer oder mehrer Dateien, zusammengefasst zu einer logischen Einheit.
In unserem Fall besteht die History des Repositorys aus zwei ChangeSets.
changeset ist die eindeutige Bezeichnung eines ChangeSet.
Die Zahl vor dem Doppelpunkt ist eine RevisionNumber, eine lokale Abkürzung für den ChangeSet. Sie gilt nur innerhalb dieses Repositorys.
Die lange Hexadezimalzahl hinter dem Doppelpunkt ist die ChangeSetID; sie stellt eine eindeutige Bezeichnung des [ChangeSet]s dar und ist gleich in allen Repositories, die diesen ChangeSet enthalten. Wenn Sie mit jemandem über einen ChangeSet diskutieren wollen, benutzen Sie die ChangeSetID, nicht die RevisionNumber.
tag ist ein Tag, ein frei gewählter Name für einen ChangeSet.
Sie können jedem beliebigen ChangeSet eien oder mehrere Tags zuweisen. In der Praxis besitzen nicht viele ChangeSets Tags, somit ist die tag-Zeile selten vorhanden.
Ein besonderes Tag namens tip markiert immer den Tip (für "Spitze"), also den jüngsten ChangeSet im Repository. Wenn wir einen weiteren ChangeSet erzeugen (was wir bald tun werden), wird dieser der neue Tip.
user (Benutzer) bezeichnet die Person, die den ChangeSet erzeugt hat. Das ist eine frei formatierbare Zeichenkette, die gewönlich eine Emailadresse enthält, manchmal auch einen Namen.
date (Datum) zeigt an, wann der ChangeSet erzeugt wurde. Diese Daten werden in der Zeitzone des Erzeugers des [ChangeSet]s angezeigt.
summary (Zusammenfassung) zeigt die erste Zeile der Beschreibung des [ChangeSet]s. Sie wurde vom Erzeuger des [ChangeSet]s eingegeben, als er diesen erzeugt hat. Er soll helfen, den Zweck des [ChangeSet]s zu verstehen.
parent bezeichnet die Eltern-ChangeSets, falls es davon mehr als einen gibt; das kommt vor, wenn Sie Änderungen aus mehreren Repositorys zusammenführen ("merge").
Meist gibt es nur einen Eltern-ChangeSet, nämlich den nächstälteren. So is es auch in unserem obigen Beispiel.
Wir können detailiertere Informationen über die History erhalten, indem die -v-Option - für "verbose", ausführlich - wählen oder die --debug-Option die alle nur denkbaren Angaben liefert:
$ hg log -v changeset: 1:82e55d328c8ca4ee16520036c0aaace03a5beb65 tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 files: Makefile description: Create a makefile (...) $ hg log --debug manifest: 1:0c7c1d435e6703e03ac6634a7c32da3a082d1600 changeset: 1:82e55d328c8ca4ee16520036c0aaace03a5beb65 tag: tip parent: 0:0a04b987be5ae354b710cefeba0e2d9de7ad41a9 parent: -1:0000000000000000000000000000000000000000 user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 files+: Makefile description: Create a makefile (...)
Die ausführliche Ausgabe enthält einige Felder zusätzlich.
changeset liefert jetzt die ungekürzte ChangeSetID.
files listet die in diesem ChangeSet geänderten Dateien auf.
description enthält die volständige mehrzeilige Beschreibung des [ChangeSet]s, nicht nur die erste Zeile.
- In unserem Beispiel besteht kein Unterschied, da die Beschreibungen nur eine Zeile umfassen.
Die --debug-Ausgabe gibt folgende Felder zusätzlich aus:
file+ Listet die in diesem ChangeSet hinzugefügten Dateien.
file- Listet die in diesem ChangeSet gelöschten Dateien.
Zwei parent-Felder geben die Changeset-ID beider Eltern für diesen Changeset, wobei -1:0000000000000000000000000000000000000000 einen nicht vorhandenen parent bezeichnet.
Der log-Befehl besitzt eine Option -r, mit der man ausgewählte Changesets ansehen kann.
$ hg log -r1 changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile
Die -r-Option stellt eine sehr flexible Syntax zur Auswahl von Changesets oder Changeset-Folgen bereit. In unserem Besipielrepository haben wir leider zu wenig Changesets, um das gut demonstrieren zu können. Bitte entnehmen Sie weitere Informationen der Manpage von Mercurial.
Der log-Befehlc besitzt eine -p-Option, um alle mit den Changesets assoziierten Patches anzuzeigen:
$ hg log -r1 -p changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile diff -r 0a04b987be5a -r 82e55d328c8c Makefile --- /dev/null Fri Aug 26 01:20:50 2005 -0700 +++ b/Makefile Fri Aug 26 01:21:28 2005 -0700 @@ -0,0 +1,1 @@ +all: hello
Wir können auch den Befehl tip verwenden, um Infos über den tip, also den jüngsten Changeset anzuzeigen. Das tip-Kommando ist also eine Abkürzung für log -r tip.
$ hg tip changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile $ hg log -r tip changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile
Da wir jetzt eine ungefähre Vorstellung haben, was bisher geschehen ist, lassen Sie uns einen Sprung machen und einige Änderungen durchführen! Auf geht's zum GermanTutorialFirstChange!