wiki:CVS

CVS steht für Concurrent Versioning System und übernimmt die Versionsverwaltung bei beliebigen textbasierten Projekten. Gut geeignet ist CVS insbesondere für Programmierprojekte, aber auch für Textverarbeitung, die auf Testdateien basiert, wie z.B. Latex. Der Lehrstuhl hat einen eigenen CVS server, der für interne Projekte verwendet wird. Zusätzlich gibt es einige davon getrennte CVS Accounts im Institut, welche für Praktika und ähnliche studentische Projekte eingesetzt werden. Die Verwendung wird im Folgenden erklärt.

CVS Accounts für Praktika

Für Praktika und ähnliche kleinere Projekte wurden mehrere CVS accounts eingerichtet, die von den Projektteilnehmern verwendet werden können und sollten.

Anonymer Zugriff auf die CVS accounts ist nicht möglich.

SSH Key erstellen

Auf die Projekte kann nur mit SSH zugegriffen werden. Daher ist es zunächst notwendig, dass die Projektteilnehmer ihren öffentlichen SSH2-Key an ihren Betreuer schicken.

Wer noch keine SSH-Keys hat, sollte sich welche erstellen:

ssh-keygen -t dsa

Die Schlüssel sollten im Home-Verzeichnis in das .ssh Unterverzeichnis gespeichert werden. Per default wird ein privater Schlüssel id_dsa und ein öffentlicher Schlüssel id_dsa.pub angelegt.

Die Datei id_dsa.pub muss dann per Mail an den Betreuer geschickt werden, damit dieser den Zugriff auf das CVS Projekt freischalten kann. Projekt das erste mal auschecken

Das Kommandozeilentool cvs muss zunächst für den speziellen cvs Account konfiguriert werden, indem folgende Systemvariablen gesetzt werden

export CVS_RSH=ssh export CVSROOT=:ext:rtsys'''XX'''@cvs.informatik.uni-kiel.de:/cvs/rtsysXX

XX muss dabei durch die entsprechende Projektnummer 00 bis 09 ersetzt werden.

Jetzt kann das Projekt aus einem Verzeichnis seiner wahl (z.B. ~/shared) das erste mal ausgecheckt werden:

cvs co rtsysXX

Die obigen Umgebungsvariablen brauchen ab jetzt nicht mehr gesetzt werden, da sie im CVS Verzeichnis selbst gespeichert wurden.

Mit CVS arbeiten

Eine Referenz der CVS Befehle gibt es z.B. unter  ximbiot.com/cvs

CVS ist ein recht mächtiges tool und viele erweiterte Funktionen werden wahrscheinlich nicht gebraucht werden (z.B. Branching). Daher hier einmal kurz die wichtigsten Befehle:

  • Bevor man anfängt zu arbeiten, sollte man immer den neuesten Stand des Projektes aus dem CVS Repository auschecken: cvs update
  • Eine neue Datei oder ein Verzeichnis dem CVS repository hinzufügen cvs add filename
  • Wenn es sich um eine Binärdatei handelt (z.B. eine Grafik, PDF, kompiliertes Programm), sollte unbedingt der Parameter -kb gesetzt werden: cvs -kb add binaryfilename
  • Eine gelöschte Datei auch aus dem CVS repository entfernen cvs rm filename
  • Solche Änderungen und alle lokalen Änderungen an den bereits vorhandenen Dateien werden nicht sofort auf den CVS Server übertragen, sondern erst gesammelt und dann mit einem commit Befehl gemeinsam hochgeladen cvs commit

Dabei wird zunächst der default Editor gestartet, in den eine Beschreibung der Änderungen eingegeben werden muss. Diese sollte unbedingt sinnvoll und ausreichend sein, damit die anderen Projektpartner verstehen, warum etwas geändert wurde. Um den Editor zu umgehen, kann die Nachricht auch direkt an den commit Befehl gehängt werden:

cvs commit -m "Re-implemented algorithm xyz"

Gemeinsames Arbeiten

CVS spielt seine Stärken insbesondere dann aus, wenn mehrere Leute gemeinsam an einer Datei arbeiten. Haben mehrere Leute dieselbe Datei editiert und laden sie über den commit Befehl hoch, wird CVS versuchen, alle Änderungen gemeinsam in die Datei zu vereinigen ("merge"). Das gelingt natürlich nur, wenn die Änderungen an verschiedenen Stellen gemacht wurden.

Ist dies nicht der Fall, meldet CVS einen Konflikt und der Benutzer muss nun manuell seine letzten Änderungen in die vorherigen Änderungen seiner Projektpartner einpflegen.

Dazu hat cvs in der Problemdatei die entsprechenden Stellen markiert, die zu bearbeiten sind.

Dabei helfen noch die folgenden Befehle:

  • Das Log mit allen Nachrichten einer Datei prüfen cvs log filename
  • Unterschiede zwischen der lokalen Kopie einer Datei zu der zuletzt eingecheckten Version anzeigen cvs diff filename
  • Unterschiede zwischen bestimmten Versionen anzeigen cvs diff -r 1.15 -r 1.16 filename

Hinweise

Programmierstil

Unterschiedliche Programmierer haben eventuell unterschiedliche Programmierstile und verwenden daher möglicherweise unterschiedliches Layout ihrer Programme (z.B. unterschiedliche Einrückungen).

Bei CVS ist es zu vermeiden, dass bei einer Datei großflächig Layout geändert wird, weil einer der Projektteilnehmer dies mehr zusagt. Insbesondere das Hinzufügen oder Löschen von Whitespace sollte vermieden werden. Dies führt bei CVS zu unübersichtlichen Änderungshistorien und Konflikte können häufig auftreten.

Man sollte sich vor Projektbeginn auf einen Stil einigen oder sich sogar dazu verpflichten, Style-Checker oder bestimmte Pretty-Printer zu verwenden.