ALIs
kommt nochRCS
Ernst Bötsch
Allgemeines
Das Quell-Verwaltungs-System RCS (Revision Control System) besteht aus 10 Kommandos mit vielen Optionen. Zum Glück benötigt man einfacheren Anwendungsfällen nur einen Teil der Kommandos und wenige der Optionen.
Zur Verwaltung der verschiedenen Versionen legt RCS für jede Quell-Datei <file>, die in die Quell-Verwaltung übernommen werden soll, eine Archiv-Datei `<file>,v' bzw. `RCS/<file>,v' an (letzteres nur dann, wenn das Sub-Verzeichnis `RCS' schon vorhanden ist).
Dabei werden alle archivierten Versionen gemeinsam in dieser einen Archiv-Datei `<file>,v' gehalten: Die letzte eingebrachte Version ist unverändert enthalten, ältere Versionen werden als Änderungen gegenüber der aktuellen Version gespeichert. Dadurch ist die Archiv-Datei sehr viel kleiner als eine Gruppe von Dateien, die jeweils eine komplette Version enthalten. Beim Herausholen einer Version (egal ob die aktuelle oder eine ältere) erhält man jedoch immer eine komplette Datei (d.h. nicht nur die Änderungen).
Bei RCS sind Versionen baumartig organisiert. Im Normal-Fall beginnt man automatisch mit der Version `1.1'. Checkt man die nächste Version ein und gibt dabei nicht explizit eine Nummer an, wird die letzte Komponente der Version um `1' erhöht (im Beispiel `1.2'). Zur Verwaltung von unabhängigen Varianten (z.B. wenn man bei älteren Versionen eine Fehlerbehebung machen muß) kann man Seitenzweige einführen; dabei kommen bei jeder Verzweigung zwei neue Versions-Komponenten hinzu (z.B. befindet `1.8.1.1' sich im Zweig von `1.8', `2.19.1.6' im Zweig von `2.19' oder `1.8.1.3.1.2' im Zweig von `1.8.1.3').
Eine neue Version kann man i.a. nur dann einbringen, wenn man den entsprechenden Versions-Zweig vorher gelockt hat.
Kurz-Anleitung zur sofortigen Nutzung von RCS
Folgende einfachen Schritte reichen in vielen Fällen aus, um Quell-Dateien mit RCS zu verwalten:
mkdir RCS
Das Verzeichnis `RCS' ist nicht unbedingt erforderlich, das Verzeichnis mit den Quell-Dateien bleibt jedoch sehr viel übersichtlicher: Die Quell-Archive werden dann nämlich alle im Sub-Verzeichnis `RCS' abgelegt und nicht zusammen mit den Quell-Dateien.ci -l <file> [...]
Einbringen der 1. bzw. einer neuen Version in die Quell-Verwaltung.
Dabei muß man i.a. einen ein oder mehrzeiligen Kommentar zu der neuen Version eingeben.rcsdiff <file> [...]
Vergleich einer Datei mit der aktuellen bzw. einer explizit angegebenen Version der dazugehörigen Archiv-Dateiident <file> [...]
Ausgabe aller RCS-Identifikatoren aus einer Dateirlog <file> [...]
Ausgabe der Kommentare zu den einzelnen Versionen
Achtung: RCS ist nicht auf Programm-Quellen beschränkt; man kann damit vielmehr beliebige Text-Dateien verwalten. Im Prinzip könnte man sogar Binär-Dateien mit RCS verwalten; die Archiv-Datei wird dann aber i.a. so groß, daß man gleich verschiedene Datein mit jeweils einer Version aufbewahren kann.
Wichtige Kommandos und Optionen
Für den täglichen Gebrauch im kleinen Rahmen benötigt man in der Regel nur folgende Kommandos (jeweils mit den gebräuchlichsten Optionen; Achtung: bei allen Optionen mit einem Argument darf zwischen Option und Argument kein White Space stehen!):
-
ci [<options>] <file> [...]Einbringen (`Check in') der 1. bzw. einer neuen Version in die Quell-Verwaltung; per Default wird <file> danach gelöscht.
-f[<revision>]
Erzwingt das Ein-Checken einer neuen Version, auch wenn sich nichts geändert hat.-l[<revision>]
Wie `-r<revision>'; zusätzlich erfolgt jedoch noch ein `co -l<revision>'.-m<message>
<message> soll als Log-Kommentar verwendet werden (wird sonst per Default interaktiv abgefragt).-n<name>
Die neue Version soll den symbolischen Namen <name> erhalten.-r<revision>
Die neue Version soll den expliziten Wert <revision> erhalten (die Version wird andernfalls einfach hochgezählt). Die angegebene Version muß dabei größer als die aktuelle Version des Archivs sein, d.h. man kann ältere Versionen nicht überschreiben.-u[<revision>]
Wie `-l<revision>'; der ausgecheckte Versions-Zweig wird jedoch nicht gelockt.-w<user>
Beim Autor-Feld wird <user> anstelle der eigenen Kennung verwendet.
-
co [<options>] <file> [...]Herausholen (`Check out') einer Version aus der Quell-Verwaltung; man erhält dadurch eine Quell-Datei mit der gewünschten Version.
-f[<revision>]
Eine vorhandene Quell-Datei wird überschrieben.-l[<revision>]
Wie `-r[<revision>]'; zusätzlich erfolgt jedoch noch ein Lock des entsprechenden Versions-Zweigs.-r[<revision>]
Aus dem Archiv wird die letzte Version herausgeholt, deren Nummer kleiner oder gleich <revision> ist. Fehlt <revision>, wird die jüngste Version verwendet.-u[<revision>]
Wie `-r[<revision>]'; zusätzlich erfolgt jedoch noch ein Un-Lock der Version.
-
rcsdiff [<options>] <file> [...]Vergleich einer Datei mit der dazugehörigen Archiv-Datei
-
-r<revision>- Fehlt diese Option, wird die Quell-Datei mit der jüngsten Version verglichen.
- Wird die Option 1-mal angegeben, wird die Quell-Datei mit der angegebenen Version verglichen.
- Gibt es die Option 2-mal, werden die beiden angegebenen Versionen miteinander verglichen.
diff-Optionen
rcsdiffstützt sich intern auf das Kommandodiffab und versteht deshalb weitgehend allediff-Optionen.
-
-
ident [<options>] <file> [...]Ausgabe aller RCS-Identifikatoren, die in einer Datei vorhanden sind, egal ob es sich um eine Text-Datei oder um ein Binary handelt (z.B. ein Programm, das durch Übersetzung aus Quellen entsteht).
-
rlog [<options>] <file> [...]Ausgabe der Kommentare zu den einzelnen Versionen
-
rcs [<options>] <file> [...]Administration einer Archiv-Datei:
-
Handhabung von Lock's:
-L
Der Lock-Modus wird auf `strikt' gesetzt, d.h. jeder Benutzer benötigt einen Lock, um eine Version Ein-Checken zu dürfen.
Dieser Modus empfiehlt sich für Dateien, die von mehreren Personen gepflegt werden.-U
Der Lock-Modus wird auf `nicht-strikt' gesetzt, d.h. der Besitzer der Archiv-Datei benötigt keinen Lock, um eine Version Ein-Checken zu dürfen.
Dieser Modus sollte nicht für Dateien verwendet werden, die von mehreren Personen gepflegt werden.-l[<revision>]
Der Versions-Zweig wird gelockt.-u[<revision>]
Aufheben eines Lock
-
-o<range>
Löschen der Versionen des Bereichs <range> (siehe Tabelle) aus der Archiv-Datei. Achtung: Diese gelöschten Verionen können danach nicht mehr wiederhergestellt werden!
Mögliche Werte für <range>:Wert Bedeutung <revision>Nur diese Version :<revision><revision> und alle älteren Versionen <revision>:<revision> und alle jüngeren Versionen <revision>:<revision>Alle Versionen im explizit angegeben Bereich -
Verwaltung von symbolischen Versions-Namen:
-N<name>[:[<revision>]]
Wie bei `-n...'; es kann jedoch die Version auch dann dem symbolischen Versions-Namen <name> zugewiesen werden, falls <name> schon verwendet wurde.-n<name>[:[<revision>]]
Fehlen `:' und <revision> beide, wird der symbolische Versions-Name <name> gelöscht. Andernfalls wird einer Version ein symbolischer Name zugewiesen, falls dieser noch nicht belegt ist. Dabei handelt es sich um die jüngste Version, falls <revision> fehlt.
-
Handhabung von Lock's:
RCS-Identifikatoren
RCS-Identifikatoren sind Strings der Form
$<keyword>: <text>$
oder
$<keyword>$
wobei RCS automatisch <text> aktualisiert. Fehlt <text> (d.h. die 2. der beiden Formen), wird diese Information nach dem nächsten Aus-Checken ergänzt. RCS kennt folgende Identifikatoren:
| Identifikator | Bedeutung | ||||||||
|---|---|---|---|---|---|---|---|---|---|
$Author$ |
Benutzer, der die Version eingechecked hat | ||||||||
$Date$ |
Datum und Uhrzeit der Version | ||||||||
$Header$ |
Voller Pfad der Archiv-Datei, Version, Datum und Uhrzeit, Benutzer, Status und locckender Benutzer | ||||||||
$Id$ |
Wie `$Header$', die Archiv-Datei wird jedoch nur mit der letzten Pfad-Komponente angegeben |
||||||||
$Locker$ |
Benutzer, der die Version gelocked hat (falls vorhanden) | ||||||||
$Log$ |
Kommentar zur Version | ||||||||
$Name$ |
Symbolischer Name der Version (falls vorhanden) | ||||||||
$RCSfile$ |
Letzte Pfad-Komponente der Archiv-Datei | ||||||||
$Revision$ |
Version | ||||||||
$Source$ |
Voller Pfad der Archiv-Datei | ||||||||
$State$ |
Status der Version. Dabei sind beliebige Werte möglich; folgende sind jedoch üblich:
|