Gentoo Linux CVS Tutorial
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:
#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
|
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.
|