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!
Im Gegensatz dazu wäre zum Beispiel mit dem Programm unison auch folgendes Szenario möglich:
A > B > C > S
A, B, C sind Rechner, die die fraglichen Daten bearbeiten können.
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, einen CVS-Server aufzusetzen, ist, dem Benutzer Zugang per SSH auf den 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 CVSROOT=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 tux_0
Hinweis: Viele Kommandos von CVS verlangen 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 tux_0
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 folgenden Befehl ein:
cvs commit
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 angeben:
cvs commit datei1 ... verzeichnis1 ...
Neue Dateien/Verzeichnisse muss man vor der Übermittlung an den Server als dem CVS zugehörig deklarieren:
cvs add datei1 ... verzeichnis1 ...
und danach übermitteln
cvs commit datei1 ... verzeichnis1 ...
Wechselt man nun den Arbeitsplatz, sollte, falls dies nicht schon in früheren Sessions am gleichen Arbeitsplatz geschehen ist, das Synchronisationsrepository ausgecheckt werden. Der Abgleich mit dem Server wird über das Kommando angestoßen:
cvs update
Man kann auch selektiv Dateien/Verzeichnisse updaten:
cvs update datei1 ... verzeichnis1 ...
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 ...
Alternativ kann man sich auch anzeigen lassen, welche Dateien von einem Update betroffen wären: cvs -nq update. Bei einem Update werden (u. a.) folgende Status-Symbole verwendet:
Die lokale Version wurde auf den neuesten Stand gebracht. Dies betrifft alle Dateien, die der Server bereitstellt, die aber nicht lokal existierten.
Die lokale Version wurde modifiziert. Soweit sich diese auf dem Server verändert hat, konnten die Änderungen auch lokal eingepflegt werden.
Die lokale Version wurde mit Hilfe eines Patches auf den aktuellen Stand gebracht.
Diese Datei ist nicht im CVS.
Der Status M markiert Dateien, die gerade bearbeitet werden. Um die Änderungen zum Server zurückzusenden, muss man den Befehl cvs commit ausführen. Wenn man stattdessen auf die eigenen Änderungen verzichten möchte, um den aktuellen Stand des Servers zu übernehmen, entfernt man die lokale Kopie, und führt erneut ein Update durch. 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. Zur Lösung eine Konfliktes bieten sich verschiedene Vorgehensweisen an. In der entsprechenden Datei werden an den betreffenden Stellen Konfliktmarken eingefügt, die manuell editiert werden können. Für Anfänger ist es empfehlenswert, in diesem Fall auf ein Hilfsprogramm wie cervisia zurückzugreifen. Alternativ kann man auch die eigene Datei umbenennen und erneut ein Update ausführen. Sobald man die Änderungen an der aktuellen Datei beendet hat, sollte man diese dem Server mit dem Befehl cvs commit übergeben. Dadurch wird die Wahrscheinlichkeit für Konflikte reduziert.
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 http://www.cvshome.org/ und http://www.gnu.org/manual/.