Diese Dokumentation wurde zur Beschreibung der Serie 1.6.x von Subversion erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.
Wie bereits in „Revisionen“ beschrieben, sind Revisionsnummern in Subversion ziemlich unkompliziert – ganze Zahlen, die bei jeder Übergabe einer Änderung größer werden. Trotzdem wird es nicht lange dauern bis Sie sich nicht mehr genau erinnern können, was in welcher Revision geschah. Glücklicherweise erfordert der typische Arbeitsablauf in Subversion selten die Angabe von beliebigen Revisionen für die von Ihnen ausgeführten Funktionen. Für Funktionen, die dennoch einen Revisionsbezeichner erfordern, geben Sie im Allgemeinen eine Revisionsnummer an, die Sie in einer Übergabe-E-Mail, in der Ausgabe einer anderen Subversion-Funktion oder in einem anderen bedeutsamen Zusammenhang gesehen haben.
Gelegentlich müssen Sie jedoch einen Zeitpunkt genau festlegen, für den Sie sich an keine Revisionsnummer erinnern können oder für den Sie keine parat haben. Deshalb erlaubt Ihnen svn neben ganzzahligen Revisionsnummern weitere Formen von Revisionsbezeichnern: Revisions-Schlüsselworte und Revisionsdaten.
Anmerkung | |
---|---|
Die verschiedenen Formen von
Subversion-Revisionsbezeichnern können bei der Angabe von
Revisionsbereichen gemischt werden. Beispielsweise können Sie
|
Der Subversion-Client versteht eine Reihe von
Revisions-Schlüsselworten. Diese Schlüsselworte können der
Option --revision
(-r
)
anstatt ganzer Zahlen als Optionsargument übergeben werden;
sie werden von Subversion zu bestimmten Revisionsnummern
aufgelöst:
HEAD
Die letzte (oder „jüngste“) Revision im Projektarchiv.
BASE
Die Revisionsnummer eines Objektes in der Arbeitskopie. Falls das Objekt lokal bearbeitet wurde, bezieht sie sich auf das unmodifizierte Objekt.
COMMITTED
Die letzte Revision kleiner oder gleich
BASE
, in der ein Objekt verändert
wurde.
PREV
Die Revision unmittelbar vor
der letzten Revision, in der ein Objekt verändert wurde.
Technisch bedeutet das
COMMITTED
-1.
Wie aus den Beschreibungen abgeleitet werden kann, werden
die Revisions-Schlüsselworte PREV
,
BASE
und COMMITTED
nur
in Bezug auf einen Pfad der Arbeitskopie verwendet – sie
sind nicht auf URLs des Projektarchivs anwendbar.
HEAD
kann hingegen in Verbindung mit beiden
Pfadtypen verwendet werden.
Hier ein paar Beispiele zur Verwendung von Revisions-Schlüsselworten:
$ svn diff -r PREV:COMMITTED foo.c # zeigt die letzte übergebene Änderung von foo.c an $ svn log -r HEAD # gibt die Protokollnachricht der letzten Übergabe an das # Projektarchiv aus $ svn diff -r HEAD # vergleicht Ihre Arbeitskopie (mit allen lokalen Änderungen) mit der # letzten Version dieses Baums im Projektarchiv $ svn diff -r BASE:HEAD foo.c # vergleicht die unmodifizierte Version von foo.c mit der letzten # Version von foo.c im Projektarchiv $ svn log -r BASE:HEAD # gibt alle Übergabe-Protokollnachrichten des aktuellen versionierten # Verzeichnisses seit der letzten Aktualisierung aus $ svn update -r PREV foo.c # macht die letzte Änderung an foo.c rückgängig, indem die # Arbeitsrevision von foo.c vermindert wird $ svn diff -r BASE:14 foo.c # vergleicht die unmodifizierte Version von foo.c mit foo.c in der # Revision 14
Revisionsnummern offenbaren nichts über die Welt außerhalb
des Versionskontrollsystems, doch manchmal müssen Sie einen
Zeitpunkt mit einem Moment der Versionsgeschichte korrelieren.
Um das zu ermöglichen, erlaubt die Option
--revision
(-r
) auch
Datumsangaben in geschweiften Klammern ({
und }
). Subversion akzeptiert die
standardisierten ISO-8601 Datums- und Zeitformate und ein paar
weitere. Hier sind einige Beispiele.
$ svn checkout -r {2006-02-17} $ svn checkout -r {15:30} $ svn checkout -r {15:30:00.200000} $ svn checkout -r {"2006-02-17 15:30"} $ svn checkout -r {"2006-02-17 15:30 +0230"} $ svn checkout -r {2006-02-17T15:30} $ svn checkout -r {2006-02-17T15:30Z} $ svn checkout -r {2006-02-17T15:30-04:00} $ svn checkout -r {20060217T1530} $ svn checkout -r {20060217T1530Z} $ svn checkout -r {20060217T1530-0500} …
Anmerkung | |
---|---|
Beachten Sie, dass es die meisten Shells erforderlich machen, mindestens Leerzeichen in Anführungsstriche zu setzen oder anderweitig zu maskieren, wenn sie Teile von Revisionsdaten-Spezifizierungen sind. Bestimmte Shells könnten auch Probleme mit der unmaskierten Verwendung von geschweiften Klammern bekommen. Schlagen Sie in der Dokumentation Ihrer Shell nach, was in Ihrer Umgebung notwendig ist. |
Falls Sie ein Datum angeben, wandelt Subversion dieses Datum in die letzte Revision zum Zeitpunkt dieses Datums um und verwendet dann die entsprechende Revisionsnummer:
$ svn log -r {2006-11-28} ------------------------------------------------------------------------ r12 | ira | 2006-11-27 12:31:51 -0600 (Mon, 27 Nov 2006) | 6 lines …
Sie können auch einen Zeitraum angeben. Subversion findet dann alle Revisionen zwischen den und einschließlich der Daten:
$ svn log -r {2006-11-20}:{2006-11-29} …
Warnung | |
---|---|
Da der Zeitstempel einer Revision als eine unversionierte, änderbare Eigenschaft einer Revision gespeichert ist (siehe „Eigenschaften“), können Revisions-Zeitstempel geändert werden, um die wahre Chronologie zu fälschen, oder gar vollständig entfernt werden. Die Fähigkeit von Subversion, Revisionsdaten in Revisionsnummern überführen zu können, beruht auf einer sequentiellen Ordnung der Revisions-Zeitstempel – je jünger die Revision, desto jünger der Zeitstempel. Falls diese Ordnung nicht aufrechterhalten wird, werden Sie voraussichtlich feststellen, dass der Versuch, Daten zur Angabe von Revisionsbereichen in Ihrem Projektarchiv zu verwenden, nicht immer die Daten zurückliefern wird, die Sie erwartet hätten. |