47.4. Einführung in CVS

CVS bietet sich zur Synchronisation an, wenn einzelne Dateien häufig bearbeitet werden und in einem Dateiformat vorliegen wie ASCII-Text oder Programmquelltext. Die Verwendung von CVS für die Synchronisation von Daten in anderen Formaten (zum Beispiel JPEG-Dateien) ist zwar möglich, führt aber schnell zu großen Datenmengen, da jede Variante einer Datei dauerhaft auf dem CVS-Server gespeichert wird. Zudem bleiben in solchen Fällen die meisten Möglichkeiten von CVS ungenutzt. Die Verwendung von CVS zur Dateisynchronisation ist nur dann möglich, wenn alle Arbeitsplatzrechner auf denselben Server zugreifen können.

47.4.1. Einrichten eines CVS-Servers

Der Server ist der Ort, wo alle gültigen Dateien liegen, d. h. insbesondere die aktuelle Version jeder Datei. Als Server kann zum Beispiel ein fest installierter Arbeitsplatzrechner dienen. Wünschenswert ist, dass die Daten des CVS-Servers regelmäßig in ein Backup mit einbezogen werden.

Ein sinnvoller Weg beim Einrichten eines CVS-Servers ist, dem Benutzer über SSH Zugang zum Server zu gestatten. So kann zum Beispiel ein fest installierter Arbeitsplatzrechner als Server dienen. Ist auf diesem Server der Benutzer als tux bekannt und sowohl auf dem Server als auch auf dem Client (zum Beispiel Notebook) die CVS-Software installiert, sollte man auf der Client-Seite dafür Sorge tragen, dass folgende Umgebungsvariablen gesetzt sind:

CVS_RSH=ssh CVS_ROOT=tux@server:/serverdir

Mit dem Befehl cvs init lässt sich dann von der Client-Seite aus der CVS-Server initialisieren (dies muss nur einmal geschehen).

Abschließend muss ein Name für die Synchronisation festgelegt werden. Wählen oder erzeugen Sie auf einem Client ein Verzeichnis, das ausschließlich Dateien enthält, die von CVS verwaltet werden sollen (es kann auch leer sein). Der Name des Verzeichnisses spielt dabei keine Rolle und soll in diesem Beispiel synchome sein. Wechseln Sie in dieses Verzeichnis. Um den Synchronisationsnamen auf synchome zu setzen, gibt man Folgendes ein:

cvs import synchome tux wilber

Viele Befehle von CVS erfordern einen Kommentar. Zu diesem Zweck ruft CVS einen Editor auf (den in der Umgebungsvariable $EDITOR definierten, ansonsten vi). Den Aufruf des Editors kann man umgehen, indem man den Kommentar bereits auf der Kommandozeile angibt, wie zum Beispiel in

cvs import -m 'dies ist ein Test' synchome tux wilber

47.4.2. Benutzung von CVS

Ab diesem Zeitpunkt kann das Synchronisationsrepository von beliebigen Rechnern „ausgecheckt“ werden: cvs co synchome Man erhält dadurch ein neues Unterverzeichnis synchome auf dem Client. Hat man Änderungen durchgeführt, die man an den Server übermitteln will, so wechselt man in das synchome-Verzeichnis (oder auch ein Unterverzeichnis desselben) und gibt den Befehl cvs commit ein.

Dabei werden standardmäßig alle Dateien, die unterhalb des aktuellen Verzeichnisses liegen, und zum lokalen CVS gehören an den Server übermittelt. Will man nur einzelne Dateien oder Verzeichnisse übermitteln, so muss man diese mit cvs commit datei1 verzeichnis1 angeben. Neue Dateien oder Verzeichnisse müssen vor der Übermittlung mit einem Befehl wie cvs add datei1 verzeichnis1 dem CVS-Repository hinzugefügt werden. Danach können sie mit cvs commit datei1 verzeichnis1 übermittelt werden.

Wechselt man nun den Arbeitsplatz, sollte das Synchronisationsrepository ausgecheckt werden, falls dies nicht schon in früheren Sessions am gleichen Arbeitsplatz geschehen ist (siehe oben).

Der Abgleich mit dem Server wird über den Befehl cvs update angestoßen. Man kann mit cvs update datei1 verzeichnis1 auch selektiv Dateien oder Verzeichnisse updaten. Will man im voraus die Unterschiede zu den auf dem Server gespeicherten Versionen sehen, so geht dies mit dem Befehl cvs diff oder explizit mit cvs diff datei1 verzeichnis1. Mit cvs -nq update kann man sich auch anzeigen lassen, welche Dateien von einem Update betroffen wären.

Bei einem Update werden u. a. folgende Status-Symbole verwendet:

U

Die lokale Version wurde auf den neuesten Stand gebracht. Dies betrifft alle Dateien, die der Server bereitstellt, die aber nicht lokal existierten.

M

Die lokale Version wurde modifiziert. Soweit sich diese auf dem Server verändert hat, konnten die Änderungen auch lokal eingepflegt werden.

P

Die lokale Version wurde mit Hilfe eines Patches auf den aktuellen Stand gebracht.

C

Die lokale Datei steht in Konflikt mit der aktuellen Version im Repository.

?

Diese Datei ist nicht im CVS.

Der Status M kennzeichnet Dateien die lokal geändert wurden. Senden Sie die lokale Version an den Server oder löschen Sie die lokale Datei und übernehmen Sie den aktuellen Stand des Servers. Die fehlende Datei wird dann vom Server geholt. Wenn von verschiedenen Benutzern die gleiche Datei an derselben Stelle editiert wurde, entsteht eine Situation, in der CVS nicht entscheiden kann, welche Version verwendet werden soll. Dieser Fall wird bei einem Update mit dem Symbol C gekennzeichnet.

In der entsprechenden Datei werden an den betreffenden Stellen Konfliktmarken (»> und «<) eingefügt, die manuell editiert werden können. Da dies ziemlich zeitaufwendig sein kann, entscheiden Sie sich vielleicht, Ihre Änderungen zu verwerfen, die lokale Datei zu löschen und cvs up einzugeben, um die aktuelle Version vom Server zu holen.

47.4.3. Weitere Informationen

Die Möglichkeiten von CVS sind umfangreich und es konnte hier nur ein kleiner Einblick gegeben werden. Weiterführende Dokumentation gibt es unter anderem unter https://www.cvshome.org/ und http://www.gnu.org/manual/.