Einführung in CVS

Inhalt

Für die Ungeduldigen

So bekommt man ein Modul in einem Rutsch auf die eigene Festplatte

ohne Schreibzugriff (ohne ssh-Tunnel)

  • CVSROOT setzen:
    export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs

  • eventuell Einloggen beim CVS-Server:
    cvs login
    (Das Paßwort lautet anoncvs )

  • checkout mit:
    cvs checkout de/www/doc

mit ssh-Tunnel

  • Tunnel aufbauen:
    ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org

  • CVSROOT setzen:
    export CVSROOT=:pserver:<loginname>@localhost:/cvs

  • eventuell Einloggen beim CVS-Server:
    cvs login
    (Das Paßwort ist das OpenOffice.org-Paßwort - dasselbe wie zum Einloggen über die OO.o-Homepage)

  • checkout mit
    cvs checkout de/www/doc

Dieses Beispiel verwendet das (Unter-)Modul de/www/doc - dort liegen die deutschsprachigen Dokumente, entweder Übersetzungen englischsprachiger Dokumente oder selbst erstellte.

Die englischsprachigen Originale befinden sich im Modul whiteboard/www/doc (beim anonymen Zugang muß wie immer oo/ vorangestellt werden) . (ist nun nicht mehr nötig)

nach oben

Ziel des Dokuments

Diese Seite soll Nutzern einen Einblick in die Nutzung des CVS ( Concurrent Versions System ) geben.

Da dies ausdrücklich für Neulinge und unerfahrene Nutzer gedacht ist, gehe ich nicht auf die Feinheiten einer Unterscheidung der verschiedenen shells (etc.) ein, sondern verwende ausschließlich die am weitesten verbreitete: bash.
Außerdem enthält dieses Dokument bis jetzt nur Beschreibungen für kommandozeilenbasiertes CVS - werden GUI-Versionen verwendet, so müssen die entsprechenden Einstellungen (wie z.B. das Setzen von CVSROOT) höchstwahrscheinlich in den Optionen des Programms getätigt werden.

nach oben

Begriffe

Anfangs sollten ein paar Grundbegriffe geklärt werden, welche im Folgenden immer wieder verwendet werden:

Organisation der Dateien

  • Repository : Damit sind die Daten auf dem entfernten Server gemeint. Dort werden alle Versionen gespeichert und bildet die Referenz zu der alle Änderungen vorgenommen werden

  • Modul : Ein Repository ist in verschiedene Module unterteilt, die im CVS-Baum als Unterordner erscheinen

  • Head: Das Allerneueste, was in CVS eingecheckt ist. Ein cvs checkout ohne Angabe eines Revisionstags holt die HEAD-Revision. Will man ältere Versionen, so muß man die gewünschte Revisions-Nummer angeben

  • Revision : Eine Art Versionsnummer, die aber mit der eigentlichen Version der Datei nichts gemein hat. Diese Nummer dient lediglich dazu, verschiedene 'Stadien' der Datei verfolgen zu können. Wird eine Datei geändert und committet, so erhöht sich die Revision um einen Zähler.

  • Working-directory oder working-copy : Die lokal vorhandenen Dateien des CVS-Baums - in der Regel wird nur mit den aktuellsten Dateien (head) gearbeitet. Auf die Festplatte bekommt man sie mit einem checkout

  • CVSROOT : Umgebungsvariable, welche den Bezugspunkt für diverse CVS-Befehle bestimmt. Die Module werden relativ zum in der Variable CVSROOT angegebenen Pfad angesprochen

CVS-Befehle

  • Checkout : Der Vorgang, bei dem die Dateien eines bestimmten Moduls aus dem Repository auf die lokale Festplatte kopiert werden. Es werden dabei nur die jeweils aktuellsten Versionen der Dateien übertragen. Die lokalen Dateien werden als working-copy bezeichnet.
    Dieses Kommando wird eigentlich nur ein einziges Mal gebraucht, um die Dateien auf die lokale Platte zu befördern. Im weiteren Betrieb genügt das update Kommando

  • Commit : Der Vorgang, bei denen die in der working-copy (oder auch working-directory) geänderten Dateien in das repository eingearbeitet werden (im Falle von OpenOffice.org sind hier spezielle Rechte notwendig, genaueres im Anhang). CVS prüft dabei, ob nicht irgendwer anders bereits eine neue Version derselben Datei committet hat und überläßt es dem Benutzer, entsprechende Konflikte aufzulösen. Will man nicht in diese Situation gelangen, so kann man vor einem commit den Status prüfen (dazu weiter unten mehr)

  • Update : Das Kommando, mit dem die Dateien des working-directory auf den aktuellen Stand gebracht werden. Alle im Repository veränderten Dateien werden heruntergeladen und die lokalen, veralteten Dateien durch diese ersetzt. Auch hier prüft CVS selbstständig auf eventuelle Konflikte (z.B. wenn eine Datei im Repository und auch lokal geändert wurde), so daß ein Datenverlust durch einfaches Überschreiben unmöglich ist.
    Neue Dateien und Verzeichnisse (Verzeichnisse nur, wenn die Kommando- Option -d verwendet wird) werden ebenso heruntergeladen

Das sollte für den Anfang erst einmal genügen. Zu spezielleren Begriffen wird gegebenenfalls im Text eingegangen.

nach oben

Einmalige Vorbereitungen

Als erstes sollte auf der lokalen Festplatte ein Verzeichnis für das working-directory angelegt werden. Es wird zwar für jedes Modul ein eigener Unterordner angelegt, trotzdem bietet sich das zur besseren Ordnung an (vor allem, wenn man an mehreren Modulen beteiligt ist).

Danach sollten die nötigen Angaben für das gewünschte Modul in Erfahrung gebracht werden: CVSROOT und der Name des gewünschten Moduls. Im Falle des deutschsprachigen Dokumentationsprojektes wären dies: :pserver:anoncvs@anoncvs.services.openoffice.org:/cvs als CVSROOT und der Modulname wäre beim anonymen Zugang de/www/doc

Damit kann man eigentlich schon loslegen: Man setzt die Umgebungsvariable, wechselt in das Verzeichnis, welches man für CVS erstellt hat und macht einen checkout mittels dem Kommando
cvs checkout de/www/doc
Eventuell muß man sich noch einloggen:
cvs login
Hat man bereits mit CVS herumgespielt, so ist das vielleicht schon nicht mehr nötig (CVS speichert die login-Paßwörter codiert in der Datei ~/.cvspass). Dieses Paßwort wird nicht zur Authentifizierung des Schreibzugriffs verwendet - dazu dient der ssh-Tunnel. Das Paßwort wird über den ssh-Tunnel verschlüsselt übertragen.

Und hier nocheinmal in der Kurzfassung:

  • Verzeichnis für das lokale CVS-Verzeichnis (working-directory) anlegen und in dieses Verzeichnis wechseln:
    mkdir cvsdir
    cd cvsdir

  • Die Umgebungsvariable CVSROOT setzen:
    export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs

  • Eventuell Einloggen:
    cvs login
    (Das Paßwort ist entweder anoncvs beim anonymen Zugang oder das entsprechende login-Paßwort für die OO.o-Seite)


  • Zuguterletzt noch einen checkout des entsprechenden Moduls machen:
    cvs checkout de/www/doc

Man sollte dann in etwa Folgendes über den Bildschirm flimmern sehen:

[cvsdir]$ cvs checkout de/www/doc
cvs server: Updating de/www/doc
U de/www/doc/header-killer.sed
U de/www/doc/index.html
U de/www/doc/stil_richtlinie.html
U de/www/doc/todo.txt
[...]
[cvsdir]$

Es wurden also alle in diesem Augenblick vorhandenen Dateien (und eventuelle Unterverzeichnisse) in der jeweils aktuellsten Version (also die head-revision) auf die lokale Festplatte übertragen. (Ebenfalls wird in jedem Verzeichnis ein Unterverzeichnis namens CVS angelegt, welches aber uns nicht weiter interessiert, da diese Dateien von CVS selbst benutzt werden)

nach oben

Verwendung von CVS im laufenden Betrieb (lesend)

Nachdem ein checkout erfolgreich durchgeführt wurde, muß die Variable CVSROOT nicht erneut gesetzt werden - sie wird in einer der Dateien im Unterverzeichnis CVS gespeichert (genauer: in der/den Datei/en CVS/Root ). Man benötigt auch das Kommando checkout nicht mehr und man muß sich nicht mehr extra einloggen - anstattdessen verwendet man meist nur die Kommandos status und update.

Beispiel: Um zu prüfen, ob sich etwas an den Dateien geändert hat, wird das status Kommando verwendet (man kann hierzu auch das update Kommando mit vorangesetzter Option -n nutzen). Im folgenden Beispiel sind alle Dateien auf dem neuesten Stand (up-to-date):

[cl@bm617259 de]$ cvs status
cvs server: Examining .
cvs server: Examining doc
===================================================================
File: header-killer.sed    Status: Up-to-date

Working revision:    1.2
Repository revision: 1.2   /cvs/de/www/doc/header-killer.sed,v
Sticky Tag:          (none)
Sticky Date:         (none)
Sticky Options:      (none)

===================================================================
File: index.html           Status: Up-to-date

Working revision:    1.3
Repository revision: 1.3   /cvs/de/www/doc/index.html,v

Sticky Tag:          (none)
Sticky Date:         (none)
Sticky Options:      (none)

[...]

Stören die Sticky-Zeilen, so kann man die Ausgabe derselben mit dem switch -Q (steht für quiet) unterdrücken:

cvs -Q status

Standardmäßig wird bei der Statusabfrage auch in Unterverzeichnisse abgestiegen. Will man das Kommando auf das aktuelle Verzeichnis beschränken, so muß man den Switch -l (steht für local) verwenden:

cvs status -l

Die Reihenfolge der Optionen (vor dem Kommando oder dahinter) ist entscheidend!

Sollten die Dateien im Repository geändert worden sein, so kann man das working-directory mit einem update auf den neuesten Stand bringen. Ein update ist mit einem checkout vergleichbar, es werden allerdings nur geänderte Dateien übertragen. Das Kommando lautet hierzu:

cvs update

Wie bei der Statusabfrage wird standardmäßig in Unterverzeichnisse abgestiegen. Mit dem -l Switch kann man dies analog dazu unterbinden.

Das update-Kommando sucht zwar standardmäß nach neuen Dateien, nicht aber nach neuen Verzeichnissen. Damit das update-Kommando auch nach neuen Unterverzeichnissen sucht, übergibt man die Kommando- Option -d . Die Option muß hinter dem 'update' stehen!
Wünschenswert wäre es natürlich, wenn die jeweiligen CVS-Committer eine entsprechende Ankündigung an die discuss_de-Mailingliste schicken würden, aber da alle nur Menschen sind, kann es gut sein, daß diese Meldung schlicht und einfach vergessen wird - schließlich hat derjenige selbst alle Dateien auch lokal auf seiner Platte und denkt erst gar nicht mehr daran.

[doc]$ cd ~/cvsdir/de/www/
[de]$ cvs update -d

CVSROOT wird wieder aus der entsprechenden Datei der working-copy ausgelesen und braucht hier deshalb nicht erneut angegeben zu werden.

nach oben

Benutzung von CVS im laufenden Betrieb (schreibend)

Jetzt, da die Dateien lokal auf der Platte sind und man gerne selbst 'Hand anlegen' möchte, braucht man auch die Kommandos, um die geänderten oder neu erstellten Dokumente öffentlich zu machen.

Geänderte Dateien übertragen

Bei bereits vorhandenen Dateien geht dies mit dem Kommando commit:

[doc]$ cvs commit [geänderte Datei(en)]

Werden dem Kommando commit keine Dateinamen übergeben, so sucht es das komplette Verzeichnis und alle Unterverzeichnisse nach lokal geänderten Dateien ab. Daraufhin wird man nach einer Mitteilung gefragt, die die Änderungen an den Dateien beschreiben soll. Da nur eine Meldung pro commit möglich ist, sollten die Dateien möglichst einzeln übertragen werden, damit die Log-Einträge nicht in Sachen enden wie 'Hab da was geändert' - So eine Nachricht hat keinen Informationsgehalt und sollte deshalb vermieden werden. Eine bessere Mitteilung ist beispielsweise Folgende: 'Icons für externe Links hinzugefügt'.

Neue Dateien hinzufügen

Neue Dateien & Verzeichnisse müssen, bevor sie hochgeladen werden können, dem lokalen CVS-Baum 'vorgestellt' werden. Dies geschieht mit dem Kommando add

[doc]$ cvs add [neue Datei(en)/Verzeichnis(se)]

Danach muß man die Dateien und/oder Verzeichnisse noch mittels dem Kommando commit übertragen, ansonsten sind sie zwar lokal einsatzbereit, aber noch nicht im Repository.

nach oben

Valid XHTML 1.0 Transitional