Gentoo Logo

Gentoo Linux CVS Tutorial

Inhalt:

1.  Einleitung

Struktur des Tutorials

Dieses Tutorial besteht aus zwei Teilen. Im ersten Teil werden Sie lernen wie Sie CVS als Nicht-Entwickler benutzen, d.h. wie Sie Quelltexte eines Programms herunterladen und stets aktualisiert halten. Im zweiten Teil werden sie dann in die Benutzung von CVS als Entwickler eingeführt. Dabei werden Sie lernen wie Sie Dateien innerhalb von CVS ändern, hinzufügen oder löschen können. Wenn Sie CVS noch nicht verwendet haben, dann sollten Sie mit dem ersten Teil beginnen. Wenn Sie allerdings schon grundlegende Erfahrungen mit CVS haben, dann können Sie den ersten Teil dieses Tutorials überspringen, wobei Sie den ersten Teil vielleicht überfliegen sollten.

Was ist CVS und wofür brauche ich es?

CVS ist ein Client-Server-System, das es Entwicklern erlaubt ihre Projekte an einem zentralen Ort zu speichern, dem sogenannten Repository. Mit den CVS Client-Programmen können Entwickler nun den Inhalt des Repositorys ändern. Das CVS merkt sich jede Änderung am Inhalt der Dateien. Auf diese Weise wird eine komplette Geschichte des Projektes geführt. Entwickler können sich so ältere Versionen einer Datei oder eine Liste von Änderungen ansehen und andere nützliche Anwendungen ausführen.

Welche Rolle spielt CVS?

Viele Open-Source Projekte haben ihren eigenen CVS Server, die von den Entwicklern des Projekts als zentraler Ablageplatz für ihre gesamte Arbeit genutzt werden. Die Quelltexte werden häufig täglich geändert und verbessert. Dabei sind die Entwickler häufig auf der ganzen Welt verstreut, und doch können sie dank CVS zusammen an einem Projekt arbeiten ohne sich gegenseitig zu behindern.

CVS -- Die aktuellsten Entwickler-Quelltexte

Wenn die Entwickler mit ihren Änderungen zufrieden sind, dann packen sie ihr Projekt in eine .tar.gz-Datei und veröffentlichen es als neue offizielle Version. Doch aus verschiedenen Gründen sind diese Versionen manchmal nicht aktuell genug. Im ersten Teil dieses Tutorials wird Ihnen nun gezeigt, wie Sie CVS einsetzen, um den neuesten Stand der Entwicklung herunterzuladen um diesen für sich selbst nutzen zu können.

CVS installieren

Um CVS zu installieren, tippen Sie einfach emerge cvs ein:

Befehlsauflistung 1.1: CVS installieren

# emerge cvs

Die CVSROOT

Bevor wir beginnen, müssen Sie über einige Grundlagen Bescheid wissen. Um sich zu einem CVS Repository zu verbinden müssen Sie zunächst die CVSROOT (das CVS Wurzelverzeichnis) kennen. Die CVSROOT ist eine Zeichenfolge, ähnlich einer URL, die dem cvs-Befehl mitteilt, wo sich das Repository befindet, und wie Sie sich mit diesem verbinden möchten. CVS benutzt verschiedene Formate für die CVSROOT-Zeichenfolge, je nachdem, ob es sich um ein lokales oder entferntes Repository handelt und welche Methode Sie verwenden, um sich mit diesem zu verbinden. Hier sind einige Beispiele für CVSROOTs mit der zugehörigen Erklärung...

Ein lokales Verzeichnis

Befehlsauflistung 1.2: Setzen von CVSROOT

CVSROOT=/var/cvsroot

Diese Einstellung würde man verwenden, wenn man ein lokales CVSROOT-Verzeichnis verwenden möchte. Dabei befindet sich das lokale CVSROOT im Verzeichnis /var/cvsroot. Natürlich wäre es auch möglich ein entferntes Verzeichnis mittels NFS an dieser Stelle gemounted zu haben.

Ein entfernter passwortgeschützter Server

Befehlsauflistung 1.3: Setzen von CVSROOT mit Authentifizierung

CVSROOT=:pserver:cvs@foo.bar.com:/var/cvsroot

Dies ist ein Beispiel für eine CVSROOT auf dem entfernten Server foo.bar.com, wobei dort das Verzeichnis /var/cvsroot verwendet wird. Das vorangestellte ":pserver:" sagt dem client, dass Sie sich über das CVS eigene Passwort-Server-Protokoll anmelden wollen. Diese Methode wird häufig verwendet, um anonymen Benutzern den Zugang zu öffentlichen CVS-Servern zu gestatten.

Ein entfernter Zugang über rsh/ssh

Befehlsauflistung 1.4: RSH/SSH CVSROOT

CVSROOT=drobbins@foo.bar.com:/data/cvs

Dies ist ein Beispiel für einen Zugang über das RSH oder SSH Protokoll. Dabei wird der CVS Server versuchen, das Repository auf foo.bar.com mittels des Benutzerkontos drobbins zu erreichen. Wenn die CVS_RSH Umgebungsvariable auf "ssh" gesetzt wurde wird der CVS-Client die Verbindung über SSH aufbauen, sonst wird RSH verwendet. Der SSH-Zugang ist beliebt, wenn Sicherheit nötig ist. Allerdings geben weder RSH noch SSH anonymen Benutzern eine Möglichkeit sich einzuloggen. Um diese Zugriffsmethode verwenden zu können, brauchen Sie ein Benutzerkonto auf dem System foo.bar.com.

Einige weitere Dinge...

Zusätzlich zur CVSROOT müssen Sie den Namen des Moduls (einer Sammlung von Quelltextdateien) wissen, das Sie "auschecken" möchten. Weiterhin brauchen Sie noch ein anonymes Passwort, um sich auf dem CVS-Passwort-Server einzuloggen. Es gibt hier kein Standardformat, wie etwa beim anonymen FTP, daher müssen Sie das anonyme Passwort auf der Entwickler-Webseite nachlesen. Wenn Sie all diese Informationen haben, können Sie loslegen.

Erste Schritte mit CVS, Teil 1

Um Quelltexte von einem CVS-Server herunterzuladen sind zwei Schritte notwendig. Zunächst loggen wir uns beim Passwort-Server ein. Dann laden wir die Quelltexte mit dem checkout Befehl herunter. Hier ein Beispiel von Befehlen, um die aktuellen Quelltexte des Samba Projektes herunterzuladen:

Befehlsauflistung 1.5: Einrichten von CVSROOT

# export CVSROOT=:pserver:cvs@pserver.samba.org:/cvsroot

Dieser erste Befehl setzt die CVSROOT-Umgebungsvariable. Wenn Sie diese Variable nicht setzen, müssen Sie die folgenden zwei Befehle jeweils durch ein -d:pserver:cvs@pserver.samba.org:/cvsroot hinter dem cvs Befehl erweitern. Die CVSROOT-Umgebungsvariable spart uns also einiges an Tipparbeit.

Erste Schritte mit CVS, Teil 2

Nun besprechen wir die Befehle, die notwendig sind, um eine aktuelle Kopie der Quelltexte zu erhalten. Weiter unten werden wir näher auf die genaue Bedeutung dieser Befehle eingehen.

Befehlsauflistung 1.6: Quellen besorgen

#cvs login
(Logging in to cvs@pserver.samba.org)
CVS password: (Geben Sie hier Ihr Passwort ein)

#cvs -z5 co samba
U samba/COPYING
U samba/Manifesst
U samba/README
U samba/Read-Manifest-Now
U samba/Roadmap
U samba/WHATSNWE.txt
(Dies ist nur ein Ausschnitt aus der eigentlichen cvs co Ausgabe

Erste Schritte mit CVS - Die Erklärung

Der erste Befehl loggt uns auf dem pserver ein. Der zweite Befehl sagt dem CVS Client, dass er das Samba-Modul auschecken soll (co - check out). Dabei wird ein gzip-Kompressions-Level von 5 ("-z5") verwendet - so wird die Übertragung über einen langsamen Internetzugang beschleunigt. Für jede Datei, die auf dem lokalen System neu erzeugt wird, gibt CVS eine "U [Pfad] "-Zeile aus. Das "U" steht dabei für "update".

Nach dem Checkout

Wenn der checkout-Befehl fertig ist, sehen Sie ein Verzeichnis "samba" in ihrem aktuellen Arbeitsverzeichnis. In allen Unterverzeichnissen werden Sie Unterverzeichnisse mit dem Namen "CVS" finden. In diesen speichert CVS Informationen über die Verzeichnisse; sie können ignoriert werden, da sie für die Benutzung von CVS nicht von Bedeutung sind. Von nun an, brauchen Sie sich keine Sorgen mehr um die CVSROOT-Umgebungsvariable machen. Sie brauchen auch den "-d"-Teil der Komamndozeile nicht mehr. Diese Informationen befinden sich nun alle in den CVS-Unterverzeichnissen. Also, Sie brauchen die CVSROOT-Variable wirklich nur für den ersten Login und das erste Checkout.

Quelltexte aktualisieren

Jetzt haben Sie die Quelltexte. Sie können diese kompilieren, installieren, einsehen oder was auch immer Sie damit anstellen möchten.

Hin und wieder wird es aber vorkommen, dass Sie diese Quelltexte auf den neusten Stand bringen möchten. Dazu müssen Sie sich nicht wieder am pserver einloggen. Ihre Informationen sind ja noch im CVS Unterverzeichnis gespeichert. Gehen sie also zunächst in das Hauptverzeichnis des Moduls, das Sie augecheckt haben, und geben Sie dann Folgendes ein:

Befehlsauflistung 1.7: Quellen aktualisieren

# cvs update -dP

Ein genauerer Blick auf "cvs update", Teil 1

Sind neue Dateien verfügbar, gibt CVS für jede Datei "U [Pfad]" aus, während die Datei gespeichert wird. Außerdem werden Sie einige Meldungen der Art "? [Pfad]" sehen, wenn Sie das Modul kompiliert haben. Dabei handelt es sich um Objekt-Dateien. CVS erkennt, dass diese Dateien nicht im entfernten CVS-Repository gespeichert sind.

Ein genauerer Blick auf "cvs update", Teil 2

Beachten Sie auch die beiden Befehlszeilenparameter, die wir verwendet haben. "-d" teilt CVS mit, dass neue Verzeichnisse angelegt werden sollen, wenn Sie auf dem entfernten Server eingerichtet worden sind. Dies würde sonst nicht geschehen. "-P" veranlasst CVS leere Verzeichnise, die auf dem Server gelöscht wurden, auch im lokalen System zu löschen. CVS neigt sonst dazu, viele nicht mehr benutzte Verzeichnisse anzusammeln.

Wenn Sie nur die neuesten Quelltexte herunterladen möchten, ist das eigentlich schon alles was Sie benötigen. Nun werden wir noch einen Blick darauf werfen, was Sie benötigen, wenn Sie mit CVS als Entwickler umgehen müssen.

2.  CVS für Entwickler

Dateien modifizieren

Als Entwickler werden Sie Dateien ändern wollen, die mittels CVS organisiert sind. Dazu müssen Sie nur wie gewohnt die lokale Datei auf ihrem System bearbeiten. Ihre Änderungen werden nicht auf dem Server geändert bis Sie CVS ausdrücklich den "commit"-Befehl (commit - einreichen) erteilen. Wenn Sie alle Ihre Änderungen sorgfältig getestet haben, und Sie sich sicher sind, dass alles ordentlich funktioniert, brauchen Sie nur diese beiden Schritte zu befolgen. Zunächst gehen Sie sicher, dass Sie die aktuellsten Quelltexte auf Ihrem lokalen System besitzen. Dazu geben Sie folgenden Befehl ein.

Befehlsauflistung 2.1: Aktualisieren der Quellen und Verzeichnisse

# cvs update -dP

CVS berücksichtigt Änderungen Anderer

Wie Sie bereits gesehen haben, bringt "cvs update" Ihre Quellen auf den neuesten Stand. Aber was passiert mit Ihren Änderungen? Keine Sorge, diese gehen nicht verloren. Wenn ein anderer Entwickler eine Änderung an einer Datei vorgenommen hat, deren lokale Version Sie nicht verändert haben, so wird CVS die Änderung einfach übernehmen.

Wenn Sie die Zeilen 1-10 einer Datei geändert haben, ein zweiter Entwickler gleichzeitig die Zeilen 30-40 geändert hat, und diese vor Ihnen ins CVS Repository eingereicht hat, so wird CVS diese Dateien intelligent in Ihre lokale Kopie einbinden. So verlieren Sie Ihre eigenen Änderungen nicht. Durch dieses sogenannte "merging" können zwei oder mehr Entwickler gleichzeitig an einer Datei arbeiten.

Merging ist nicht perfekt!

Haben nämlich zwei Entwickler gleichzeitig die selbe Region einer Datei geändert, so wird es etwas kompilizierter. CVS wird Sie dann über einen Konflikt informieren. Auch wenn natürlich keine Arbeit verloren geht, ist etwas manuelle Arbeit erforderlich. CVS benötigt jetzt Ihre Eingabe um zu entscheiden, wie die Änderungen zu "mergen" sind.

"commit" - Übergeben - Oder, wie man seine Arbeit einreicht

Nun werden wir einen genauen Blick darauf werfen, wie die oben erwähnten Konflikte ausgeräumt werden können. Zunächst werden wir allerdings annehmen, dass keine Konflikte vorliegen, als Sie "cvs update -dP" eingegeben haben. Wenn keine Konflikte durch Ihre lokalen Dateien auftreten und Ihre lokalen Dateien auf dem aktuellen Stand sind, sind Sie bereit Ihre Änderungen an das CVS zu übergeben.

Befehlsauflistung 2.2: Änderungen einbringen

# cvs commit

Was "commit" eigentlich macht

"cvs commit" reicht nicht nur Ihre Änderungen ein. Bevor die Änderungen eingereicht werden, wird Ihr Editor gestartet. Hier können Sie nun eine Beschreibung Ihrer Änderungen eingeben. Speichern Sie die Datei und verlassen Sie den Editor, werden Ihre Änderungen und die zugehörigen Kommentare den anderen Entwicklern zugänglich gemacht.

Die Log-Datei ansehen

Es ist sehr einfach sich die komplette Änderungsgeschichte einer Datei sowie die entsprechenden Kommentare anzeigen zu lassen. Um diese Informationen zu sehen, geben Sie folgendes ein:

Befehlsauflistung 2.3: Betrachten der Protokoll-Information

# cvs log meineDatei.c

Der "cvs log" Befehl ist rekursiv. Möchten Sie also die gesamten Änderungen eines ganzen Verzeichnisses anzeigen lassen, so wechseln Sie in das entsprechende Verzeichnis, bevor Sie folgenden Befehl eingeben:

Befehlsauflistung 2.4: Betrachten der Protokoll-Information mit einem Pager

# cvs log | less

Optionen des "commit"-Befehls

Sie möchten vielleicht einen bestimmten Editor verwenden, um Ihre Log-Einträge zu machen. Dazu können Sie einfach die "EDITOR"-Umgebungsvariable ändern. Es ist eine gute Idee diese Einstellung mittels Ihrer ~/.bashrc-Datei permanent einzurichten.

Befehlsauflistung 2.5: Setzen des Editors

export EDITOR=jpico

Alternativ zum Verwenden eines Editors können Sie CVS den Log-Eintrag auch direkt über die Kommandozeile mitteilen. Verwenden Sie hierzu die -m-Option.

Befehlsauflistung 2.6: Änderungen einbringen mit einer kleinen Protokoll-Information

# cvs commit -m 'Ein paar blöde Fehler in portage.py beseitigt'

Die .cvsrc Datei

Bevor wir uns einige weitere CVS-Befehle ansehen, empfehle ich Ihnen sich eine ~/.cvsrc-Datei anzulegen. Mittels dieser Datei können Sie CVS einige standard Befehlszeilenparameter mitteilen, sodass Sie diese nicht jedes Mal eingeben müssen.

Befehlsauflistung 2.7: Empfohlene Standards

cvs -q
diff -u -b -B
checkout -P
update -d -P

Die .cvsrc Datei - Die Erklärung

Die erste Zeile der Datei bringt CVS in den "quiet"-(leise)-Modus. So wird die Ausgabe des "cvs update"-Befehls deutlich lesbarer. Außerdem können Sie, sobald Sie diese Datei eingerichtet haben, einfach "cvs update" anstatt "cvs update -dP" eingeben.

Eine neue Datei in das Repository einfügen

Es ist sehr einfach eine neue Datei in CVS einzubinden. Zunächst erstellen Sie eine neue Datei wie üblich. Dann geben Sie diesen Befehl ein:

Befehlsauflistung 2.8: Eine Datei hinzufügen

# cvs add meineDatei.c
cvs server: use 'cvs commit' to add this file permanently

Die Datei wird beim nächsten Ausführen von "cvs commit" dem Repository hinzugefügt werden. Vorher werden andere Entwickler diese Datei nicht sehen!

Ein Verzeichnis in das Repository hinzufügen

Der Vorgang zum Hinzufügen eines Verzeichnises ist ähnlich:

Befehlsauflistung 2.9: Ein Verzeichnis hinzufügen

# mkdir foo
# cvs add foo
Directory /var/cvsroot/meinCode/foo added to the repository

Anders als bei einer Datei, wird ein neues Verzeichnis sofort für andere Entwickler sichtbar. Es ist also kein "cvs commit" erforderlich. Sobald Sie eine lokale Datei in das neue Verzeichnis speichern, werden Sie sehen, dass ein neues Unterverzeichnis namens "CVS" eingerichtet wird. Dieses Verzeichnis dient als Aufbewahrungsort für die Daten, die notwendig sind, um die Dateien zu verwalten. So lässt sich leicht erkennen, ob sich ein bestimmtes Verzeichnis im CVS-Repository befindet, indem man nach einem CVS-Unterverzeichnis sucht.

"cvs add" - Notizen

Wie Sie sich vielleicht gedacht haben müssen Sie, bevor eine Datei in das CVS hinzugefügt werden kann, sicherstellen, dass das Verzeichnis im CVS Repository ist. Sonst werden Sie diesen Fehler zu sehen bekommen:

Befehlsauflistung 2.10: Eine Datei hinzufügen, aber einen Fehler erhalten

# cvs add meineDatei.c
cvs add: cannot open CVS/Entries for reading: No such file or directory
cvs [add aborted]: no repository

Ein genauerer Blick auf "cvs update", Teil 1

Bevor wir uns genauer ansehen, wie Konflikte gelöst werden, sollten wir uns mit der Ausgabe des "cvs update"-Befehls vertraut machen. Wenn Sie eine ~/.cvsrc-Datei mit der Zeile "cvs -q" eingerichtet haben, wird die Ausgabe deutlich einfacher zu lesen sein. "cvs update" informiert Sie detailiert darüber was es gerade unternimmt, indem es einen Buchstaben, gefolgt von einem Leerzeichen und dem Namen einer Datei ausgibt. Zum Beispiel:

Befehlsauflistung 2.11: CVS aktualisieren

# cvs update -dP
? distfiles
? packages
? profiles

Ein genauerer Blick auf "cvs update", Teil 2

"cvs update" verwendet das Fragezeichen, um Ihnen mitzuteilen, dass es nichts über diese Datei weiß. Diese Dateien und Verzeichnisse befinden sich nur in dem lokalen Verzeichnis, und sind nicht Teil des offiziellen Repositories. Und sie wurden auch nicht mit dem "add"-Befehl hinzugefügt. Hier ist eine Liste mit weiteren Buchstaben und deren Bedeutung:

Befehlsauflistung 2.12: Informierende Nachricht: U

U [Pfad]

Wird ausgegeben, wenn eine neue Datei oder ein neues Verzeichnis in ihrem lokalen Verzeichnis erzeugt wird, oder wenn eine Datei, die Sie nicht geändert haben, aktualisiert (U wie Update) wird.

Befehlsauflistung 2.13: Informierende Nachricht: A

A [Pfad]

Diese Datei ist dazu vorgesehen, in das Repository hinzugefügt zu werden, und wird beim nächsten "cvs commit" aufgenommen.

Ein genauerer Blick auf "cvs update", Teil 3

Befehlsauflistung 2.14: Informierende Nachricht: R

R [Pfad]

Analog "A", sagt ein "R" aus, dass diese Datei für die Löschung vorgesehen ist. Also wird die Datei gelöscht, wenn Sie das nächste Mal "cvs commit" ausführen.

Befehlsauflistung 2.15: Informierende Nachricht: M

M [Pfad]

Das "M" bedeutet, dass diese Datei von Ihnen modifiziert worden ist. Außerdem kann es bedeuten, dass neue Änderungen vom Repository in die lokale Datei eingebunden wurden.

Befehlsauflistung 2.16: Informierende Nachricht: C

C [Pfad]

Der Buchstabe "C" bedeutet, dass ein Konflikt vorliegt. Manuelles Einbinden der Änderungen wird nötig sein, bevor Sie "cvs commit" ausführen können.

Konflikte auflösen

Nun werden wir uns ansehen wie man einen Konflikt ausräumt. Ich bin sehr in das Gentoo Linux Projekt eingebunden, dort haben wir unsere eigenen CVS-Server unter cvs.gentoo.org. Wir Entwickler verbringen unsere Zeit hauptsächlich damit, die Quellen zu hacken, die im "gentoo-x86"-Modul abgelegt sind. In diesem Modul haben wir eine Datei namens "ChangeLog", die (wie Sie bereits erraten haben) eine Beschreibung der wichtigsten Änderungen beinhaltet.

Ein Beispiel-Konflikt

Da diese Datei fast jedes Mal geändert wird, wenn ein Entwickler eine Änderung vornimmt, ist sie eine der Hauptquellen für Konflikte. Nehmen wir uns diesen Beispielkonflikt vor: Nehmen wir an, dass ich die folgenden Zeilen hinzugefügt habe.

Befehlsauflistung 2.17: ChangeLog Eintrag

date 25 Feb 2001

This is the thing I added myself

Nehmen wir ferner an, dass bevor ich die Möglichkeit hatte "cvs commit" durchzuführen, jemand anders diese Änderung vorgenommen hat.

Befehlsauflistung 2.18: ChangeLog Eintrag Nr.2

date 25 Feb 2001

This is the part added by another developer

Ein Beispielkonflikt - Teil 2

Wenn ich nun "cvs update -dP" ausführe (was man immer vor einem "commit" tun sollte), so erhalte ich eine Konfliktmeldung, da CVS nicht in der Lage ist, meine lokale Änderung selbstständig in das CVS Repository einzufügen.

Befehlsauflistung 2.19: CVS Fehler

RCS file: /var/cvsroot/gentoo-x86/ChangeLog,v
retrieving revision 1.362
retrieving revision 1.363
Merging differences between 1.362 and 1.363 into ChangeLog
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in ChangeLog
C ChangeLog

Konfliktlösung

Argh, ein Konlikt! Zum Glück ist die Lösung einfach. Ich starte meinen Texteditor, und sehe den Text am Anfang der Datei ChangeLog.

Befehlsauflistung 2.20: ChangeLog Konflikt

<<<<<<< ChangeLog
date 25 Feb 2001

This is the thing I added myself

=======
date 25 Feb 2001

This is the part added by another developer

>>>>>>> 1.363

Konfliktlösung, Teil 2

Anstatt eine der beiden Versionen zu bevorzugen, hat CVS einfach beide Versionen zusammengefügt, und mittels eindeutiger Zeichen erkenntlich gemacht, wo der Konflikt liegt. Nun ist es an mir, die entsprechenden Regionen durch den Text zu ersetzen, der wirklich dort stehen sollte. In diesem Fall, ist der zu ersetzende Text weder der eine noch der andere, beide sollen hintereinander in der Datei stehen.

Befehlsauflistung 2.21: ChangeLog Eintrag

date 25 Feb 2001

This is the thing I added myself

This is the part added by another developer

Nun habe ich die Konfliktregion in der Datei mit dem entsprechenden Text ersetzt (und die "======" gelöscht). Jetzt kann ich die Änderung mittels "cvs commit" problemlos übertragen.

Einige Tips zur Konfliktlösung

Wann immer Sie eine Datei editieren, in der Konflikte aufgetreten sind, sollten Sie die gesamte Datei nach den Konfliktzeichen durchgehen, so dass Sie alle Konfliktregionen bearbeiten! Wenn Sie einen Konflikt übersehen, wird CVS Ihnen nicht erlauben, die Änderungen zu übertragen. Es ist daher offensichtlich sehr wichtig, alle Konfliktzeichen ("=====") zu löschen. Falls Sie einen Fehler beim Editieren der Datei machen, und dann Ihre Änderung speichern, können Sie immer noch eine Originalversion Ihrer Datei finden. Diese trägt den Namen ".#Dateiname.Version".

Eine Datei löschen

Nun ist es an der Zeit die letzte CVS Funktionsweise zu erlernen, die Entfernung von Dateien aus dem Repository. Es sind zwei Schritte nötig um eine Datei zu entfernen. Zuerst löschen Sie Datei von der lokalen Kopie Ihrer Quellen und führen dann den passenden cvs remove Befehl aus:

Befehlsauflistung 2.22: Entfernen einer Datei

# rm meine_alte_datei.c
# cvs remove meine_alte_datei.c

Eine Datei löschen, weitergeführt

Die Datei wird durch den Befehl fürs Löschen vorgesehen, wenn Sie das nächste Mal ein "cvs commit" durchführen. Sobald Sie ein "commit" durchgeführt haben, wird die Datei offiziell aus dem CVS Repository gelöscht sein. CVS wird die Datei jedoch nicht einfach "wegwerfen", sondern vielmehr alle Daten im Zusammenhang mit dieser Datei (sowohl Inhalt, als auch Geschichte der Änderungen) behalten. Dies ist wieder ein Beispiel, wie CVS Ihren wertvollen Quelltext beschützt.

"cvs remove" ist rekursiv. Das bedeutet, dass Sie mehrere Dateien gleichzeitig löschen können, und dann "cvs remove" von einem übergeordneten Verzeichnis aus aufrufen können, mit keinem weiteren Argument. Wenn Sie dies tun, werden alle Dateien als "zu-löschen" gekennzeichnet, bis Sie das nächste Mal "cvs commit" aufrufen. Dann werden alle gelöscht.

Ein Verzeichnis löschen

Wenn Sie ein gesamtes Verzeichnis löschen möchten, empfehle ich diese Vorgehensweise. Löschen Sie zunächst alle Dateien und entfernen Sie sie auch mittels "cvs remove" aus dem CVS Repository, wie oben beschrieben.

Befehlsauflistung 2.23: Ein Verzeichnis entfernen

#  rm *.c
#  cvs remove

Ein Verzeichnis löschen, weitergeführt

Dann übergeben Sie Ihre Änderungen an das CVS Repository.

Befehlsauflistung 2.24: Einbringen Ihrer Änderungen

# cvs commit

Nun folgt der Trick. Folgen Sie diesen Schritten, um das Verzeichnis wirklich zu löschen:

Befehlsauflistung 2.25: Ein Verzeichnis entfernen

# cd ..
# cvs remove mein_Verzeichnis
# rm -rf mein_Verzeichnis

Beachten Sie, dass das Löschen des Verzeichnisses keinen weiteren Aufruf von "commit" benötigt. Verzeichnisse werden dem Repository in Echtzeit hinzugefügt beziehungsweise gelöscht.

Abrufen einer älteren Version

CVS wäre kein gutes Versionssystem, wenn man keine älteren Versionen aus dem Repository abrufen könnte. Sie können Dateien anhand eines gegebenen Datums beziehen, aber selbstverständlich auch anhand der Revisionsnummer. Das nächste Beispiel bezieht Revision 1.202 der Datei dateiname und überschreibt die aktuelle Version von dateiname mit dieser Version:

Befehlsauflistung 2.26: Beziehen einer Datei anhand der Revisionsnummer

$ cvs update -p -r 1.202 dateiname > dateiname

Falls Sie Dateien anhand des Datums abrufen wollen, benutzen Sie das Argument -D. Verwenden können Sie komplette Daten/Zeitstempel, aber auch relative Namen, wie bspw. yesterday (engl. für gestern) oder last week (engl. für letzte Woche) sind möglich.

Das wars!

Das war Ihre Einführung in CVS. Ich hoffe, dass dieses Tutorial Ihnen hilfreich war. Natürlich hat CVS eine Menge mehr Funktionen als die hier vorgestellten, aber dank der umfassenden Ressourcen zum Thema CVS können Sie sich nach Bedarf weiter informieren.

Über dieses Dokument

Die ursprüngliche Version dieses Artikels wurde zuerst bei IBM developerWorks veröffentlicht und ist Eigentum von Westtech Information Services. Dieses Dokument ist eine erneuerte Version des Original-Artikels und enthält verschiedene Verbesserungen durch das Gentoo Linux Documentation Team.



Drucken

Seite aktualisiert 20. Mai 2008

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieses Tutorial führt den Leser in CVS, das Concurrent Versions System, ein. Dieses System wird von Entwicklern rund um die Welt eingesetzt, um Software flexibel und in Zusammenarbeit zu entwickeln. Diese Einführung ist für diejenigen gedacht, die noch keine Erfahrung mit CVS haben. Egal, ob Sie CVS nur verwenden möchten, um immer die aktuellesten Quelltexte eines Programms herunterzuladen, oder ob Sie als Entwickler an einem großen Projekt mitarbeiten möchten, diese Kurzanleitung wird Sie mit den nötigen Grundlagen versorgen.

Daniel Robbins
Autor

Xavier Neys
Bearbeiter

Patrick Sudowe
Übersetzer

Tobias Scherbaum
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.