[[Vorlage(Archiviert, "CVS wird nicht mehr aktiv weiterentwickelt. Die letzte Version stammt aus dem Jahr 2009, die Homepage wird auch nicht mehr aktualisiert. Alternativen sind im Artikel [:Versionsverwaltung:] zu finden.")]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [http://www.nongnu.org/cvs/ CVS] {en} steht für "Concurrent Versions System" und ist ein Programm zur [:Versionsverwaltung:] von Daten wie zum Beispiel Konfigurationsdateien, dem Quellcode von Programmen, und so weiter. CVS wird seit 1989 entwickelt und fußt auf RCS, welches es nach wie vor zur Versionsverwaltung benutzt. Es besitzt somit also eine sehr sichere und stabile Codebasis. In den letzten Jahren hat CVS mit [:Archiv/Subversion:Subversion] oder Git zwar starke Konkurrenz erhalten, jedoch hat es immer noch einen sehr guten Ruf unter Programmierern und Administratoren. Zuerst sollte man sich die Funktionsweise von CVS anschauen. Bei CVS wird eine Art Master-Kopie einer (oder vieler) Datei(en) in einem sogenannten Repository gehalten. Man kann nun die Dateien von diesem Repository laden, sich die Änderungen der Datei anzeigen lassen und diese lokal verändern. Nach dem lokalen Verändern kann man sie wieder in das Repository einfügen und so anderen zugänglich machen. = Installation = Zur Installation muss das Paket {{{#!vorlage Paketinstallation cvs }}} installiert [1] werden. = Repository erstellen = {{{#!vorlage Hinweis Im Folgenden muss natürlich darauf geachtet werden, dass je nach dem in welchem Verzeichnis man arbeitet, die Befehle als Root ausgeführt werden müssen, damit man Schreibrechte hat! Außerdem sei darauf hingewiesen, dass Root und ein User sich nicht die gleichen Umgebungsvariablen teilen! }}} Ein Repository zu erstellen ist an sich recht einfach. Zuerst muss man einen Ordner erstellen, wo das Repository liegen soll. Etabliert haben sich dabei entweder '''/usr/local/cvsroot''' oder '''/home/cvsroot'''. Dies ist jedoch nicht verpflichtend; der Name des Ordners und wo er genau liegt sind beliebig. Man sollte allerdings natürlich darauf achten, dass die Partition, auf der das Repository liegen soll, genügend freien Speicherplatz besitzt. Nun sollte man, um sich das Leben leichter zu machen, die [:Umgebungsvariable:] "CVSROOT" auf den Pfad des Repositorys setzen. Wenn man dies nicht macht, muss man im Folgenden bei den cvs Befehlen immer mit dem Parameter ``-d PFAD`` den Pfad zum Repository extra angeben. Nun wechselt man in das eben erstellte Verzeichnis für das Repository und führt den Befehl: {{{#!vorlage Befehl cvs init }}} aus. Das Repository ist nun erstellt. Dass es geklappt hat, erkennt man daran, dass der obige Befehl keinen Fehler ausgegeben hat. Außerdem befindet sich im oben erstellten Verzeichnis nun ein Unterordner mit dem Namen '''CVSROOT''' und in diesem Ordner '''CVSROOT''' befinden sich einige Dateien: {{{#!vorlage Befehl /usr/local/cvsroot$ ls }}} Ausgabe: {{{ CVSROOT /usr/local/cvsroot$ ls CVSROOT/ checkoutlist history postproxy rcsinfo,v checkoutlist,v loginfo postproxy,v taginfo commitinfo loginfo,v posttag taginfo,v commitinfo,v modules posttag,v val-tags config modules,v postwatch verifymsg config,v notify postwatch,v verifymsg,v cvswrappers notify,v preproxy cvswrappers,v postadmin preproxy,v Emptydir postadmin,v rcsinfo }}} == Modul einfügen == Modul nennt man eine Sammlung von Dateien die zusammen gehören, wie zum Beispiel alle Quellcode-Dateien eines Programmes oder alle Konfigurationsdateien eines bestimmten Programmes. Diese werden innerhalb von CVS dann zu einem Modul zusammengefasst. Die Syntax zum Einfügen eines Modules in CVS ist abstrakt: {{{#!vorlage Befehl cvs import [Modulname] [Herstellername] [Releasenummer] }}} Als Modulname sollte immer der Ordner verwendet werden, welcher in CVS eingefügt werden soll. Warum das wichtig ist, sieht man nachher beim Auschecken. Der Herstellername und die Releasenummer sind eher unwichtig. CVS verlangt jedoch deren Eingabe. Im Folgenden wird nun beispielhaft davon ausgegangen, dass sich die Dateien, die man in CVS einchecken möchte, im Ordner '''~/Desktop/meinprojekt''' befinden: {{{#!vorlage Befehl ls }}} Ausgabe: {{{ datei1 datei3 datei5 Unterordner1 datei2 datei4 datei6 Unterordner2 ~/Desktop/meinprojekt$ ls Unterordner1/ datei7 datei8 datei9 ~/Desktop/meinprojekt$ ls Unterordner2/ datei10 datei11 datei12 }}} Zuerst muss man in das Verzeichnis wechseln, welches man einfügen möchte: {{{#!vorlage Befehl cd ~/Desktop/meinprojekt }}} Nun kann man den Ordner inklusive der Dateien und aller Unterordner in CVS einfügen: {{{#!vorlage Befehl ~/Desktop/meinprojekt$ cvs import meinprojekt mein_projekt v0-1 }}} Ausgabe: {{{ N meinprojekt/datei6 N meinprojekt/datei4 N meinprojekt/datei1 N meinprojekt/datei5 N meinprojekt/datei3 N meinprojekt/datei2 cvs import: Importing /usr/local/cvsroot/meinprojekt/Unterordner2 cvs import: Importing /usr/local/cvsroot/meinprojekt/Unterordner1 N meinprojekt/Unterordner1/datei1 N meinprojekt/Unterordner1/datei3 N meinprojekt/Unterordner1/datei2 No conflicts created by this import }}} Nun löscht man den Ordner: {{{#!vorlage Befehl cd ~/Desktop/ rm -r meinprojekt }}} Und kann ihn schließlich wieder inklusive seines Inhaltes aus dem CVS auschecken mit: {{{#!vorlage Befehl cvs co meinprojekt }}} Ausgabe: {{{ cvs checkout: Updating meinprojekt U meinprojekt/datei1 U meinprojekt/datei2 U meinprojekt/datei3 U meinprojekt/datei4 U meinprojekt/datei5 U meinprojekt/datei6 cvs checkout: Updating meinprojekt/Unterordner1 U meinprojekt/Unterordner1/datei1 U meinprojekt/Unterordner1/datei2 U meinprojekt/Unterordner1/datei3 cvs checkout: Updating meinprojekt/Unterordner2 }}} = Daten von einem Repository beziehen = == lokal == Um Daten von einem lokalen Repository zu beziehen reicht es aus den Befehl {{{#!vorlage Befehl cvs -d /pfad/zum/repository co MODULNAME }}} auszuführen. Den Pfad mittels ``-d`` anzugeben kann man sich sparen, wenn man die [:Umgebungsvariable:] "CVSROOT" auf den Pfad gesetzt hat. {{{#!vorlage Hinweis Die Dateien werden nun in einem Ordner gespeichert, der den gleichen Namen trägt wie das Modul. Deswegen wurde oben auch gesagt, dass man als Modulnamen immer den Namen des übergeordneten Verzeichnisses wählen soll. }}} == remote == Zuerst stellt man [:SSH:] als Übertragungsmethode ein: {{{#!vorlage Befehl export CVS_RSH=ssh }}} Um ein entferntes Repository auszuchecken benutzt man nun den Befehl: {{{#!vorlage Befehl cvs -d :ext:BENUTZERNAME@SERVER/CVSROOT co MODULNAME }}} Meist reicht jedoch auch: {{{#!vorlage Befehl cvs -d :ext:anonymus@SERVER/cvsroot co MODULNAME }}} = Daten zu einem Repository hochladen = Dateien zu einem Repository hochzuladen geht genauso wie das Herunterladen, nur dass man den Befehl ``commit`` benutzt: {{{#!vorlage Befehl cvs -d REPOSITORY commit DATEI }}} = Nützliche Befehle = Zeigt einem an, ob alle Dateien einer lokalen Kopie auf dem neusten Stand des Repositorys sind: {{{#!vorlage Befehl cvs -n update }}} Zeigt einem die komplette Revisionsgeschichte eines Modules an: {{{#!vorlage Befehl cvs log }}} Zeigt einem die komplette Revisionsgeschichte einer einzelnen Datei an: {{{#!vorlage Befehl cvs log [DATEINAME] }}} = Links = * [http://www.nongnu.org/cvs/ offizielle CVS Webseite] {en} * [http://ximbiot.com/cvs/wiki/ CVS-Wiki bei Ximbiot] {en} * [http://www.linuxdevcenter.com/pub/a/linux/2002/01/03/cvs_intro.html Introduction to CVS] {en} (von der CVS-Meisterin Jennifer Vesperman) * [http://www.linuxdevcenter.com/pub/a/linux/2002/01/17/cvsadmin.html CVS Administration] {en} (von der CVS-Meisterin Jennifer Vesperman) * [http://www.stierand-linuxit.de/Doku/cvs-tutorial.html ein weiteres CVS-Tutorial] {de} # tag: Versionsverwaltung, Shell