4.4 Tags -- Symbolische Revisionen
Revisionsnummern werden unabhängig von der Releasenummer
des Softwareproduktes vergeben. Je nachdem, wie man CVS
einsetzt, kann sich die Revisionsnummer zwischen zwei Releases
mehrmals ändern. Z.B. haben einige Sourcefiles von RCS 5.6
folgende Revisionen:
| | ci.c 5.21
co.c 5.9
ident.c 5.3
rcs.c 5.12
rcsbase.h 5.11
rcsdiff.c 5.10
rcsedit.c 5.11
rcsfcmp.c 5.9
rcsgen.c 5.10
rcslex.c 5.11
rcsmap.c 5.2
rcsutil.c 5.10
|
Mit dem tag Kommando kann man einer bestimmten Revision
eines Files einen symbolischen Namen geben. Die `-v' Option
des status CVS Kommandos zeigt alle Tags eines Files
und die zugehörigen Revisionen an.
Tagnamen müssen mit einem Klein- oder Großbuchstaben beginnen
und können Klein- und Großbuchstaben, Ziffern, sowie die
Zeichen `-' und `_' ehthalten.
Die beiden Tagnamen BASE und HEAD sind für CVS-
interne Zwecke reserviert. Vermutlich werden in Zukunft neue
CVS-interne Tagnamen einen speziellen Aufbau haben, z.B. könnten
sie alle mit einem `.' beginnen, um Konflikte mit normalen
Tagnamen zu vermeiden.
Oft werden Tagnamen nach bestimmten Mustern gebildet,
bspw. aus dem Programmnamen und der Releasenummer.
Man könnte die Releasenummer direkt an den Programmnamen
anhängen und den `.' durch `-' ersetzen, so daß
CVS 1.9 das Tag cvs1-9 erhalten würde.
Eine einheitliche Namensgebung vermeidet das ständige Raten,
ob nun cvs-1-9 oder cvs1_9 das richtige Tag ist.
Man kann ein solche Namensgebung sogar vorschreiben,
indem das File `taginfo'
( 8.3 Nutzer definiertes Logging) angepaßt wird.
Das folgende Beispiel zeigt, wie ein Tag zu einem File
hinzugefügt wird. Die Kommandos müssen im Arbeitsverzeichnis,
d.h. im Verzeichnis, in dem sich das File `backend.c'
befindet, ausgeführt werden.
| | $ cvs tag rel-0-4 backend.c
T backend.c
$ cvs status -v backend.c
===================================================================
File: backend.c Status: Up-to-date
Version: 1.4 Tue Dec 1 14:39:01 1992
RCS Version: 1.4 /u/cvsroot/yoyodyne/tc/backend.c,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
Existing Tags:
rel-0-4 (revision: 1.4)
|
Eine vollständige Beschreibung der Syntax von cvs tag mit
allen Optionen findet man in B. Quick reference to CVS commands.
Selten wird ein Tag nur an ein File vergeben. Viel häufiger ist der Fall,
daß alle Files eines Moduls zu bestimmten Zeitpunkten des
Entwicklungszyklus mit einem Tag versehen werden, z.B. wenn ein
Release erstellt wird.
| | $ cvs tag rel-1-0 .
cvs tag: Tagging .
T Makefile
T backend.c
T driver.c
T frontend.c
T parser.c
|
(Wird CVS ein Verzeichnis als Argument übergeben, so führt es
im allgemeinen die Aktion mit allen Files in diesem Verzeichnis aus und
(rekursiv) mit allen Unterverzeichnissen dieses Verzeichnis.
6. Recursive behavior.)
Das checkout Kommando besitzt die Option `-r', mit der man
eine Revision des Moduls gezielt wiederherstellen kann. Mit diesem Flag
kann man später, nachdem das Modul `tc' geändert und weitere
Releases definiert wurden, zum Release 1.0 zurückkehren:
| | $ cvs checkout -r rel-1-0 tc
|
Das ist bspw. sinnvoll, wenn in diesem Release ein Fehler vorhanden
sein soll, der im aktuellen Release nicht auftritt.
Man kann ebenfalls den Zustand eines Moduls von einem bestimmten Zeitpunkt
wiederherstellen. A.7.1 checkout options.
Arbeitet man mit der Option `-r', so sollte man auf Sticky Tags
achten; siehe auch 4.9 Sticky tags.
Vergibt man das gleiche Tag an mehr als ein File, so kann man es sich
als "Kurve durch die Matrix von Filenamen und Revisionsnummern"
vorstellen. Angenommen wir haben fünf Files mit folgenden Revisionen:
| | file1 file2 file3 file4 file5
1.1 1.1 1.1 1.1 /--1.1* <-*- TAG
1.2*- 1.2 1.2 -1.2*-
1.3 \- 1.3*- 1.3 / 1.3
1.4 \ 1.4 / 1.4
\-1.5*- 1.5
1.6
|
Vor einiger Zeit wurden die *-Versionen mit einem Tag versehen.
Dieses Tag kann man sich als Schlaufe an der Linie durch die
getaggten Filerevisionen vorstellen. Zieht man an dieser Schlaufe, so
erhält man alle Revisionen mit diesem Tag.
Oder man stellt sich das Tag als "Blick" durch eine Menge von
Revisionen vor, die an der Stelle des Tags flach aufeinander liegen:
| | file1 file2 file3 file4 file5
1.1
1.2
1.1 1.3 _
1.1 1.2 1.4 1.1 /
1.2*----1.3*----1.5*----1.2*----1.1 (--- <--- Look here
1.3 1.6 1.3 \_
1.4 1.4
1.5
|
|