Dieser Text befindet sich gegenwärtig in Bearbeitung, unterliegt ständigen Änderungen und kann dadurch nicht stets akkurat irgendeine freigegebene Version der Software Apache™ Subversion® beschreiben. Das Speichern dieser Seite als Lesezeichen oder andere auf diese Seite zu verweisen, ist keine so gute Idee. Besuchen Sie http://www.svnbook.com/, um stabile Versionen dieses Buchs zu erhalten.

Revisionsbezeichner

Wie bereits in „Revisionen“ beschrieben, sind Revisionsnummern in Subversion ziemlich unkompliziert – ganze Zahlen, die bei jeder Übertragung 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 Übertragungs-E-Mail, in der Ausgabe einer anderen Subversion-Funktion oder in einem anderen bedeutsamen Zusammenhang gesehen haben.

[Anmerkung] Anmerkung

Es ist verbreitete Praxis in Subversion-Gemeinden, Revisionsnummern mit dem Präfix r zu versehen (z.B., r314); diese Praxis wird von vielen Werkzeugen in Verbindung mit Subversion sowohl unterstützt als auch gefördert. An den meisten Stellen, an denen Sie auf der Kommandozeile eine nackte Revisionsnummer angeben würden, können Sie auch die Syntax rNNN verwenden.

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] Anmerkung

Die verschiedenen Formen von Subversion-Revisionsbezeichnern können bei der Angabe von Revisionsbereichen gemischt werden. Beispielsweise können Sie -r REV1:REV2 verwenden, wobei REV1 ein Revisions-Schlüsselwort und REV2 eine Revisionsnummer ist oder REV1 ein Datum und REV2 ein Revisions-Schlüsselwort, usw. Die einzelnen Revisionsbezeichner werden voneinander unabhängig ausgewertet, so dass Sie links und rechts des Doppelpunktes angeben können, was Sie möchten.

Revisions-Schlüsselworte

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 übertragene Änderung von foo.c an

$ svn log -r HEAD 
# gibt die Protokollnachricht der letzten Übertragung 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 Übertragungs-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

Revisionsdaten

Revisionsnummern offenbaren nichts über die Welt außerhalb des Versions-Kontroll-Systems, 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 update -r {2006-02-17}
$ svn update -r {15:30}
$ svn update -r {15:30:00.200000}
$ svn update -r {"2006-02-17 15:30"}
$ svn update -r {"2006-02-17 15:30 +0230"}
$ svn update -r {2006-02-17T15:30}
$ svn update -r {2006-02-17T15:30Z}
$ svn update -r {2006-02-17T15:30-04:00}
$ svn update -r {20060217T1530}
$ svn update -r {20060217T1530Z}
$ svn update -r {20060217T1530-0500}
…
[Anmerkung] 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 (Mo, 27. Nov 2006) | 6 Zeilen
…

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] Warnung

Die Fähigkeit von Subversion, Revisionsdaten in Revisionsnummern überführen zu können, beruht auf einer sequentiellen Ordnung der Revisions-Datumsstempel – je jünger die Revision, desto jünger der Datumsstempel. Da Datumsstempel jedoch in der unversionierten, änderbaren svn:date-Eigenschaft einer Revision gespeichert werden (siehe „Eigenschaften“), können Revisions-Datumsstempel aus der Reihenfolge geraten. Die meisten Operationen von Subversion jedoch bekommen davon nichts mit – schließlich ist die Versionsnummer an sich das primäre Unterscheidungsmerkmal jeder Revision. Falls die Reihenfolge der Datumsstempel jedoch 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. Die Verschmelzung von Historien mehrerer Projektarchive in ein einzelnes (wie unter „Projektarchiv-Daten woanders hin verschieben“ beschrieben) ist der häufigste Ursache für dieses Szenario.