Kommandozeile unter GNU/Linux

Dokumente auschecken

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...)

Dokumente einchecken

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...])

Dokumente aktualisieren

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 von unterschiedlichen Personen

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...)

Bestimmte Release-Stände kennzeichnen

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...)

Eigenes Modul anlegen

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...)