CVS - Concurrent Versions System
Unterpunkte dieser Seite
Terminus
Installation unter Windows
Installation eines cvs Servers unter Ubuntu
Ein Repository erstellen
Ein Projekt erstellen
Ein Projekt auschecken
Ein Projekt einchecken
Den Status einer Datei abfragen
Eine neue Datei ins Projekt einfügen
Terminus
Repository
Verzeichnisbaum indem alle original Dateien aller Projektes, die mit CVS
verwaltet werden, abgelegt sind. Wenn das Repository zerstört wird, sind alle
Projekte verloren.
Das Repository ist also das Herzstück jedes Projektes und es ist etwa mit einer
Datenbank vergleichbar, in der alle Quellcodes gespeichert sind.
Projekt
Das Repository verwaltet beliebig viele Projekte.
Modul
Ein Projekt besteht aus Modulen.
checkout
Dateien lassen sich nicht bearbeiten, lassen sich nicht direkt im Repository
bearbeiten, Dateien müssen aus dem Repository kopiert werden. Nur die Kopien
auf der Lokalen Festplatte lassen sich berabeiten.
Der Vorgang des kopierens wird checkout genannt.
checkin
Nachdem lokale Kopien bearbeitet wurden, muss die Änderung ins Repository
übernommen werden, damit der Arbeitsvortschritt zum einen gespeichert wird und
damit der Arbeitsvortschritt allen Mitarbeitern zugute kommt.
Das Übernehmen der Änderungen ins Repository wird als checkin bezeichnet.
Arbeitsbereich
Projekte lassen sich nicht bearbeiten wenn sie im Repository liegen.
Um Projekte zu bearbeiten müssen Kopien von den Dateien eines Projektes auf der
Lokalen Festplatte des Programmierers angelegt werden. Man nennt solche lokalen
Kopien Arbeitsbereiche. Arbeitsbereiche sind also keine Organisationsstruktur
im Repository sondern enstehen durch auschecken eines Projekts aus dem
Repository. Diese lokalen Kopien können dann editiert werden. Nach dem
Bearbeiten der Dateien, kann das Repository geupdated werden. Die Änderungen
die im Arbeitsplatz an den Dateien vorgenommen wurden, werden dann ins
Repository übernommen, und stehen allen Mitarbeitern zur Verfügung.
Installation unter Windows
Laden Sie von www.cvshome.org die win32
binaries von cvs herunter. Entpacken Sie den Inhalt des zip files in ein
gewünschtes Verzeichnis. Fügen Sie den Pfad ihres cvs Verzeichnises in
die PATH Umgebungsvariable hinzu:
Start > Einstellungen > Systemsteuerung > System > Reiter "Erweitert" >
Kopf "Umgebungsvariablen" ganz unten > Feld "Systemvariablen" > PATH markieren
> getrennt durch ein Semikolon den Pfad zur cvs Installation angeben.
Testen Sie in der Kommandozeile, ob Sie die Version von cvs erfragen können
indem sie den cvs -v Befehl von überall ausführen können. Wenn das von
überall möglich ist, hat die Erweiterung der PATH Variable geklappt.
Installation eines cvs Servers unter Ubuntu
Download
Unter Ubuntu Linux kann man mit dem Synaptic Package Manager das Packet cvs herunterladen. Dieses Packet enthällt sowohl die Dateien die Sie brauchen um cvs als lokales Programm zu betreieben als auch alle Dateien die benötigt werden um den cvs-pserver einzurichten, der für Netzwerkzugriffe auf cvs benötigt wird.
Motivation
Es gibt grundsätzlich zwei Möglichkeiten CVS zu verwenden. CVS kann als lokales Programm betrieben werden. Dabei kann der Benutzer ein lokales Repository auf seiner Festplatte benutzen um seine Arbeit zu organisieren. Diese Methode unterstützt allerdings nicht die Arbeit im Team und ist nur für Einzelprogrammierer geeignet. Die zweite Variante ist die Server Variante. Ein cvs-pserver verwaltet ein Repository auf einer zentralen Maschine im Netzwerk. Jedes Teammitglied kann dieses Repository erreichen.
Ein Spezialfall stellt Eclipse dar. Ein Einzelprogrammierer kann die CVS Unterstützung in Eclipse nutzen. Eclipse erlaubt aber nur den Zugriff auf CVS Server. Eclipse kann grundsätzlich nicht auf lokale Repositories zugreifen. Damit muss ein Einzelprogrammierer einen cvs-pserver aufsetzen um lokal mit Eclipse und CVS arbeiten zu können.
Ein Repository anlegen
Bevor man den Server startet muss man als root ein Repository anlegen. Wir verwenden die default Vorgabe und legen das Repository namens cvsroot im Verzeichnis /usr/local an.
sudo cvs -d /usr/local/cvsroot init
Die Umgebungsvariable CVSROOT
Fügen sie in die Datei /etc/profile folgendes ein:
CVSROOT=/usr/local/cvsroot
export CVSROOT
um die Variable CVSROOT für alle user des Systems zu exportieren.
Benutzerkonten
CVS benutzt andere Benutzer als Linux. CVS implementiert eine eigene Benutzerverwaltung, die von den Linux Accounts unabhängig ist. Man stellt Benutzer in der Datei /usr/local/cvsroot/CVSROOT/passwd ein, falls man sein Repository an dieser Stelle erzeugt hat. Die Datei passwd existiert übrigens nicht nach dem Anlegen des Repositorys, man muss Sie selbst erzeugen.
test::bischowg
alias:passwd:real_id wobei alias der Name des CVS Users ist, passwd sein CVS Password und real_id der User Account auf dem Linux System.
Den cvs-pserver starten
Nach der Installation des cvs Packetes ist der cvs-pserver noch nicht in der /etc/inetd.conf eingetragen, das heist der Netzwerk superdaemon inetd wird den cvs-pserver nicht starten. Man fügt daher als root folgende Zeile in die /etc/inetd.conf Datei ein.
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs -f --allow-root=/usr/local/cvsroot pserver
Man startet inetd neu indem man sudo /etc/init.d/inetd restart
eingibt, dabei übernimmt inetd die Änderungen aus der /etc/initd Datei.
Was ist xinetd
xinetd steht für extended inetd. xinetd ersetzt inetd und bietet eine Menge Erweiterungen zu inetd. Es gibt ein Packet namens xinetd im Synaptic Package Manager. Dieses Packet ist in der Ubuntu Standardinstallation nicht installiert. In der Standardinstallation ist nur das Packet netkit-inetd installiert, dies ist das Packet für den inetd superdaemon.
Man kann cvs aber auch mit inetd einrichten ohne xinetd zu verwenden.
Ein Project per Exclipse einchecken
Projekt markieren (z.B. im Package Browser) > Rechtsklick > Team > Share Project > host: localhost (oder ip), Repository path: /usr/local/cvsroot, User: test, Password: leer lassen, da test kein Passwort hat Connection: pserver. Use default port.
Ein Repository erstellen
Ein Repository wird mit dem Befehl init erzeugt:
cvs -d ~/RepFolder init
erzeugt ein Repository in einem Ordner namens RepFolder der im home Verzeichnis
des Benutzers liegt (~ = Homeverzeichnis). Der Schalter -d gibt an, wo das
Repository Verzeichnis erzeugt werden soll
Ein Projekt erstellen
Ein Projekt wird im Repository mittels dem Befehl import erzeugt:
cvs -d ~/RepFolder import -m "Kommentar" projname projname initial
-d gibt das Verzeichnis des Repositorys an in das das Projekt eingefügt werden
soll. -m "Kommentar" fügt einen Kommentar zum Projekt hinzu. Der drittletzte
Parameter ist der Name des Projekts unter dem man mit dem Projekt kommuniziert.
Bei den letzten beiden Parametern handelt es sich um Tags.
Bevor Sie den import Befehl ausführen, begeben Sie sich in das Verzeichnis,
indem sich der Arbeitsbereich des Verzeichnisses befindet. D.h. in das
Verzeichnis in dem die Dateien auf ihrer lokalen Festplatte gespeichert sind,
die sie zum Projekt im Repository hinzufügen wollen. Sie müssen in den
Arbeitsbereich navigieren, da der import Befehl alle Dateien des
aktuellen Verzeichnisses, in das Projekt im Repository einfügt ! Der aktuelle
Pfad wird also implizit als Quelle verwendet.
cvs gibt in die Kommandozeile den Fortschritt des Prozesses aus.
I - Datei wurde ignoriert und nicht ins Repository aufgenommen.
N - Datei wurde neu ins Repository eingefügt, da Sie noch nicht drin war.
Ein Projekt auschecken
ACHTUNG: cvs kommt durcheinander wenn sie einen checkout in ein Verzeichnis ausführen, in dem bereits Dateien gelegen haben. Man sollte daher immer in ein leeres Verzeichnis auschecken.
ACHTUNG: cvs überschreibt bei einem checkout alle gleichnamigen Dateien, die sich im Verzeichnis befinden in das ausgecheckt wird ohne Ausnahme. cvs führt keinen Vergleich oder ähnliches durch, ob die lokalen Dateien eventuel neuer sind als die Dateien im Repository stört cvs nicht. Für cvs ist das checkout Verzeichnis ein leeres Verzeichnis. cvs kümmert sich um nichts. Man muss immer alle aktuellsten Versionen im Repository haben.
Ein Projekt wird mit dem Befehl checkout oder kurzschreibweise mit co ausgecheckt.
cvs -d /Pfad/zum/Repository checkout [OPTIONS] projname
Der Befehl checkout erzeugt einen Arbeitsbereich. Ein Arbeitsbereich ist das Verzeichnis in dem die Dateien liegen, die zum Projekt gehören und von cvs aus dem Repository in dieses Verzeichnis beim checkout hier abgelegt werden. Zusätzlich besitzt ein Arbeitsbereich ein Verzeichnis mit dem Namen CVS. In diesem Verzeichnis, das CVS automatisch beim checkout erzeugt, legt CVS Dateien ab, die Versionsinformationen zu allen Dateien im Arbeitsbereich enthalten. Nur mithilfe dieses Verzeichnisses und der darin gespeicherten Informationen kann cvs den status einer Datei abfragen oder ein Projekt überhaupt wieder einchecken oder updaten. Wenn Sie keinen Arbeitsbereich haben, können Sie nicht mit cvs arbeiten ! Das bedeutet Sie müssen ein Projekt erst auschecken. Ach wenn Sie ein neues Projekt mit import anlegen, haben Sie noch keinen Arbeitsbereich. Sie müssen das neu erzeugte Projekt zuerst auschecken, erst dann haben Sie einen Arbeitsbereich. Falls Sie einmal einen Arbeitsbereich erzeugt haben, können Sie diesen lange Zeit nutzen, da sie ihn immer auf dem neusten Standbringen können und ihre Änderungen von ihm einchecken können.
-d gibt das Verzeichnis an, indem das Repository liegt.
projname ist der Name des Projektes, das Sie auschecken wollen.
Checkout kopiert die Dateien aus dem Repository in das aktuelle Verzeichnis, indem Sie sich in der Kommandozeile gerade befinden. Es wird innerhalb des Verzeichnisses ein Verzeichnis anlegen, das genauso heisst wie der Projektname des Projektes das Sie auschecken. In diesen Ordner wird es auschecken. Sie sollten daher zuerst in den gewünschten Arbeitsplatz navigieren, bevor Sie checkout ausführen. Man kann allerdings die checkout option -d verwenden um ein Verzeichnis anzugeben in das ausgecheckt werden soll. Dieses Verzeichnis wird automatisch angelegt.
cvs -d /Pfad/zum/Repository checkout -d ~/neuesVerzeichnis projname
Ein Projekt einchecken
Ein Projekt muss einmalig im Repository mittels des Befehls import erstellt werden. Dabei werden alle Dateien aus einem Verzeichnis in ein Projekt im Repository importiert. Das Verzeichnis aus dem die Dateien importiert wurden, wird durch diesen Vorgang nicht automatisch zu einem Arbeitsbereich. Da man nur einchecken kann, wenn man einen Arbeitsbereich vorliegen hat, ist es wichtig sich einen Arbeitsbereich zu schaffen. Nach dem erstellen per import kann man mit dem commit Befehl noch nicht einchecken. Man muss einen Arbeitsbereich vorliegen haben. (Ein Arbeitsbereich wird charackterisiert, durch einen CVS Ordner der von cvs automatisch erzeugt wurde. Es reicht also nicht selbst einen solchen Ordner anzulegen. Dieser CVS Ordner enthällt Dateien die die Historie des Projektes speichern. Nur mit Hilfe dieser Dateien kann cvs ein commit vornehmen. Deshalb wird eine Arbeitsplatz benötigt.) Wir sind bisher also in folgender Situation: Das Projekt wurde im Repository erzeugt, es enthällt Kopien der Dateien aus dem Verzeichnis aus dem man importiert hat. Das Verzeichnis aus dem man importiert hat, ist kein Arbeitsbereich, da es kein CVS Verzeichnis besitzt. Wir haben noch überhaupt keinen Arbeitsbereich. Unser Ziel ist es nun einen Arbeitsbereich zu erzeugen, so dass wir auch einchecken können (geht nur mit CVS Verzeichnis!!). Wir erstellen einen Arbeitsbereich indem wir das Projekt aus dem Repository auschecken. Nach dem auschecken können wir Änderungen vornehmen. Wir wollen nun einchecken. Ein Projekt wird mittels commit eingecheckt.
cvs -d /Pfad/zum/Repository commit -m "Kommentar"
Die Dateien werden aus dem aktuellen Verzeichnis entnommen. Navigieren Sie daher in den gewünschten Arbeitsplatz bevor Sie commit ausführen. Man kann allerdings auch in ein beliebiges Verzeichnis navigieren und dann zusätzlich hinter dem Kommentar noch den Pfad zum Arbeitsbereich angeben. cvs wird dann selbstständig in den Arbeitsbereich navigieren und einchecken.
cvs -d /Pfad/zum/Repository commit -m "Kommentar" /Pfad/zum/Arbeitsbereich
Den Status einer Datei abfragen
Nachdem man ein Projekt aus dem Repository in einen Arbeitsbereich ausgecheckt hat, kann man den Status einer Datei im Arbeitsbereich herausfinden. Der Status besagt, ob eine Datei im Arbeitsbereich im Gegensatz zur gleichnamigen Datei im Repository verändert wurde.
mkdir Arbeitsbereich
cd Arbeitsbereich
cvs -d /mnt/flash/repository co homepage
cvs -d /mnt/flash/repository status index.html
Mit dem Befehl status testet man den Status der Datei die im Arbeitsbereich liegt im Vergleich zum Repository.
Man kann nur den Status von Dateien überprüfen, die man ausgecheckt hat. CVS scheint sich zu merken welche Dateien es ausgecheckt hat. CVS kann dann nur den Status dieser ausgecheckten Dateien überprüfen. Wenn man also einen Ordner besitzt, in dem eine alte Version eines Programmes liegt, das auch im Repository vorhanden ist, so kann man den Status der Dateien nicht herausfinden. Man muss ein Projekt auschecken um den Status abfragen zu können.
Eine neue Datei ins Projekt einfügen
Wenn man an seinem Projekt arbeitet wird man neue Dateien erzeugen. Beim commit werden diese Dateien nicht automatisch mit in das Repository eingebunden. Man muss dies manuel mit dem cvs add Befehl machen.
cvs -d /pfad/zum/repositary add dateiname
Um den add Befehl wie oben beschrieben anwenden zu können muss man sich im gleichen Verzeichnis befinden, in der die Datei liegt, die man durch add hinzufügen will. Die Datei wird dann in das entsprechende Verzeichnis im repository abgelegt.
Wenn man sich gerade in einem beliebigen Verzeichnis befindet und eine Datei hinzufügen will, die aber auch im Arbeitsbereich liegen muss, so kann man den add Befehl wie folgt verwenden.
cvs -d /pfad/zum/repositary add -d dateiname
zum Seitenanfang
zur Hauptseite
Letzte Änderung: 09.11.2005