| Kurzanleitung zur Versionsverwaltung mit CVS | ||
|---|---|---|
| Zurück | Nach vorne | |
Umgebungsvariable zur Nutzung der ssh zur Datenübertragung setzen:
$ export CVS_RSH=ssh $
Nun kann das Projekt bzw. Modul demo abgerufen werden:
$ cvs -d :ext:leutloff@abraxas.oche.de:/var/cvsroot checkout demo leutloff@abraxas.oche.de's password: cvs server: Updating demo cvs server: Updating demo/src cvs server: Updating demo/src/gui U demo/src/gui/Main.java $
Das U vor dem Dateinamen demo/src/gui/Main.java sagt aus, dass die betreffende Datei neu angelegt oder mit Informationen vom zentralen Server aktualisiert wurde.
Bei dem obigen Vorgang wurden das Arbeitsverzeichnis demo neu angelegt:
$ ls -R demo demo: CVS/ src/ demo/CVS: Entries Entries.Log Repository Root demo/src: CVS/ gui/ demo/src/CVS: Entries Entries.Log Repository Root demo/src/gui: CVS/ Main.java demo/src/gui/CVS: Entries Repository Root $
In den Unterverzeichnissen mit dem Namen CVS werden Verwaltungsinformationen von CVS abgelegt. Deshalb müssen beispielsweise bei CVS-Befehlen im Unterverzeichnis demo nicht mehr die Informationen über das CVS-Repository (-d :ext:leutloff@abraxas.oche.de:/var/cvsroot) nicht mehr mitangegeben werden.
(Syntax: checkout [options] modules...)
Nach dem nun die Datei Main.java verändert wurde, können diese Änderungen ins CVS eingespielt werden:
$ cvs -d leutloff@abraxas.oche.de:/var/cvsroot commit -m "was wurde geändert" demo cvs commit: Examining demo cvs commit: Examining demo/src cvs commit: Examining demo/src/gui leutloff@abraxas.oche.de's password: Checking in demo/src/gui/Main.java; /var/cvsroot/demo/src/gui/Main.java,v <-- Main.java new revision: 1.2; previous revision: 1.1 done $
In dem Arbeitsverzeichnis geht es auch einfacher (nach erneuter Änderung der Datei Main.java):
$ cd demo $ cvs commit -m "was wurde geändert" cvs commit: Examining . cvs commit: Examining src cvs commit: Examining src/gui leutloff@abraxas.oche.de's password: Checking in src/gui/Main.java; /var/cvsroot/demo/src/gui/Main.java,v <-- Main.java new revision: 1.3; previous revision: 1.2 done $
(Syntax: commit [-lnRf] [-m 'log_message' | -F file] [-r revision] [files...])
Sollen die Dokumente in dem Arbeitsverzeichnis mit den Informationen vom zentralen Server aktualisiert werden, so wird der folgende Befehl benutzt:
$ cvs -d :ext:leutloff@abraxas.oche.de:/var/cvsroot update demo leutloff@abraxas.oche.de's password: cvs server: Updating demo cvs server: Updating demo/src cvs server: Updating demo/src/gui P demo/src/gui/Main.java $
In dem betreffenden Arbeitsverzeichnis geht es auch einfacher:
$ cd demo $ cvs update leutloff@abraxas.oche.de's password: cvs server: Updating . cvs server: Updating src cvs server: Updating src/gui P src/gui/Main.java $
Mit dem Buchstaben P (wie patched) werden die erfolgreich aktualisierten Dateien gekennzeichnet.
Gleichzeitige Änderungen an unterschiedlichen Stellen derselben Datei werden von CVS automatisch bewältigt. Denn in dieser Situation ist das System sicher, dass beide Änderungen gewollt sind. Wurde aber die gleiche Datei von unterschiedlichen Leuten an der gleichen Stelle geändert, so muss derjenige, der seine Änderung später ins zentrale System einspielt entscheiden, welche der Änderungen nun gültig ist. Hier zunächst die Anzeige, wenn dieser Fall eintritt:
$ cd demo $ cvs commit -m "gleichzeitig geändert" cvs commit: Examining . cvs commit: Examining src cvs commit: Examining src/gui leutloff@abraxas.oche.de's password: cvs server: Up-to-date check failed for `src/gui/Main.java' cvs [server aborted]: correct above errors first! $
Wie gefordert wird die Aktualisierung angestossen:
$ cvs update leutloff@abraxas.oche.de's password: cvs server: Updating . cvs server: Updating src cvs server: Updating src/gui RCS file: /var/cvsroot/demo/src/gui/Main.java,v retrieving revision 1.6 retrieving revision 1.7 Merging differences between 1.6 and 1.7 into Main.java rcsmerge: warning: conflicts during merge cvs server: conflicts found in src/gui/Main.java C src/gui/Main.java $
So sieht die betreffende Stelle im Editor aus:
<<<<<<< Main.java Hier wird eine Stelle gleichzeitg geändert. ======= Hier wird eine Stelle gleichzeitig geändert! >>>>>>> 1.7
Der Nutzer kann nun entscheiden welche der beiden Versionen nun die richtige ist. Dazu löscht er einfach die unerwünschte und die Zeilen, die die Versionen voneinander trennen. Dann kann er die Änderungen wie bereits bekannt einspielen:
$ cvs commit -m "gleichzeitig geändert" cvs commit: Examining . cvs commit: Examining src cvs commit: Examining src/gui leutloff@abraxas.oche.de's password: Checking in src/gui/Main.java; /var/cvsroot/demo/src/gui/Main.java,v <-- Main.java new revision: 1.8; previous revision: 1.7 done $
(Syntax: update [-AdflPpR] [-d] [-r tag|-D date] files...)
Um dem aktuellen Dokumentenversionen einen Namen zu vergeben, wird die Option -r benutzt. Im Beispiel wird der Name (englisch: tag) "Erster" vergeben:
$ cd demo $ cvs tag Erster leutloff@abraxas.oche.de's password: cvs server: Tagging . cvs server: Tagging src cvs server: Tagging src/gui T src/gui/Main.java $
(Syntax: tag [OPTIONS] TAG [FILES...])
Die Tags einer Datei können mit dem Befehl status abgerufen werden:
$ cd demo $ cvs status -v leutloff@abraxas.oche.de's password: cvs server: Examining . cvs server: Examining src cvs server: Examining src/gui =================================================================== File: Main.java Status: Up-to-date Working revision: 1.8 Repository revision: 1.8 /var/cvsroot/demo/src/gui/Main.java,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Existing Tags: Erster (revision: 1.8) start (revision: 1.1.1.1) cl (branch: 1.1.1) $
(Syntax: status [OPTIONS] FILES...)
Eher selten muss ein eigenes Modul angelegt werden. Dies kann beispielsweise mit dem Import-Kommando erfolgen. Hier wird das weiter oben verwendete Beispiel erzeugt:
$ mkdir demo $ mkdir demo/src $ mkdir demo/src/gui $ touch demo/src/gui/Main.java $ mkdir demo/src/db $ cd demo $ export CVS_RSH=ssh $ cvs -d leutloff@abraxas:/var/cvsroot import -m "Verzeichnisstruktur angelegt" demo cl start leutloff@abraxas's password: cvs server: Importing /var/cvsroot/demo/src cvs server: Importing /var/cvsroot/demo/src/gui N demo/src/gui/Main.java No conflicts created by this import $
Nun könnte das Verzeichnis gelöscht werden und anschließend wie unter Abschnitt namens Dokumente auschecken wieder ausgecheckt werden:
$ cd .. $ rm -rf demo $
(Syntax: import [-options] repository vendortag releasetag...)
| Zurück | Zum Anfang | Nach vorne |
| Kurzanleitung zur Versionsverwaltung mit CVS | Grafische Oberfläche in Java, auch für GNU/Linux |