Kurze Einführung in CVS

Transcription

Kurze Einführung in CVS
Universität Koblenz-Landau
Institut für Softwaretechnik
Prof. Dr. Jürgen Ebert
Kurze Einführung in CVS
Vortrag auf dem TiW ’98, 29. 9. 1998
Version: 1.8
10. Juni 1999
Friedbert Widmann
Zusammenfassung
CVS kann als System zur Versionsverwaltung in der ganzen Arbeitsgruppe eingesetzt werden. Es bietet eine einfache Schnittstelle und ein projektorientiertes Konzept.
In diesem Papier ist die Bedienung kurz dargestellt.
INHALTSVERZEICHNIS
1
Inhaltsverzeichnis
1
Vergleich mit RCS
3
2
Eine kleine Beispiel-Session
3
2.1
Initialisieren der Datenbasis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.1
Initialisieren des Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2
Eintragen eines Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
Arbeiten mit Modulen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2.1
Auschecken eines Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2.2
Aktualieren der eigenen Arbeitskopie . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.3
Bestätigen von eigenen Änderungen . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.4
Zufügen von Dateien oder Unterverzeichnissen . . . . . . . . . . . . . . . . . .
4
2.2.5
Löschen von Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2.6
Betrachten von Unterschieden . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2.7
Freigabe der Arbeitskopie . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2
3
Konflikte und Kompromisse
5
4
Versionsnummern und symbolische Namen: Tag
6
5
Verzweigungen
6
5.1
Anlegen eines Zweiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
5.2
Beenden eines Zweiges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
5.2.1
Abbrechen des Pfades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
5.2.2
Übernehmen in den Hauptpfad . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
6
7
8
Versionsinformationen in den Dateien
8
6.1
Informationen in Objekt-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
6.2
Probleme mit den Informationstexten . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Mehrere BenutzerInnen
10
7.1
Konfiguration der eMail-Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
7.2
Meldungen aktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
7.3
Meldungen empfangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
7.4
Änderungen beginnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
7.5
Änderungen beenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
7.6
Informationen abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Weitere Funktionen
11
INHALTSVERZEICHNIS
9
Tools und GUI’s zu CVS
2
11
9.1
CVSWEB: WWW-Browser zum Blättern im Repository . . . . . . . . . . . . . . . . .
12
9.2
Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
9.3
Graphische Oberflächen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
A Zugriff über Einwählverbindungen
13
A.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
A.2 MS-Windows 95/NT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
B Tips — Fragen und Antworten
14
1
Vergleich mit RCS
3
Auf dem Rand wird auf die Kapitel im Handbuch [4] hingewiesen. Eine ausführliche Beschreibung aller CVS-Kommandos ist in [4, Anhang A].
1 Vergleich mit RCS
RCS
Verwaltet die Versionen einzelner Dateien.
CVS
Faßt ganze Unterverzeichnisse zu Modulen
zusammen und verwaltet sie gemeinsam.
Einzelne Dateien werden zum Edieren für alle
anderen BenutzerInnen gesperrt.
Es gibt keinen exklusiven Zugriff. Die
Änderungen von mehreren BenutzerInnen
werden zusammengemischt.
Die Versionsinformationen und Geschichten
der einzelnen Dateien werden dezentral in
Nähe der Arbeitsverzeichnisse gespeichert.
Es wird ein zentrales Repository angelegt,
welches als Datenbasis für alle Module (alle
Dateien) dient.
Das Zusammenmischen von Änderungen macht wenig Probleme, solange die Zuständigkeiten in den
Projekten sauber getrennt sind. In dem Fall kommt es selten vor, daß gleichzeitig mehrere Personen die
selben Stellen in Dateien ändern. Sollte es trotzdem vorkommen, so wird man von CVS beim Lösen der
Konflikte unterstützt.
[4, 10.7]
2 Eine kleine Beispiel-Session
2.1 Initialisieren der Datenbasis
Das zentrale Repository muß einmal initialisiert werden und wird mit dem Anfangszustand der Module
gefüllt. Diese Aktionen sind im Alltagsbetrieb nicht mehr nötig.
2.1.1 Initialisieren des Repository
[4, 2.6]
> cvs -d /home/ist/CVS-Repository init
Erstellt das Verzeichnis und initialisiert die internen Datenstrukturen.
2.1.2 Eintragen eines Modules
[4, 3.1]
> cd Tiw98/CVS-Einfuehrung
> cvs -d /home/ist/CVS-Repository import cvs-intro Widi rel1_0
Kopiert alle Dateien im aktuellen Verzeichnis unter dem Modulnamen cvs-intro in das Repository.
Es werden die Namen Widi am Versionsstamm und rel1_0 bei der aktuellen Versionen eingetragen.
Da das Repository auf die Datenstruktur von RCS aufbaut, können alte RCS-Dateien sehr einfach in CVS
integriert werden.
[4, 3.1.2]
2.2 Arbeiten mit Modulen
2.2.1 Auschecken eines Modules
> cvs -d /home/ist/CVS-Repository checkout cvs-intro
[4, 1.3.1]
2.2 Arbeiten mit Modulen
4
cvs checkout: Updating cvs-intro
U cvs-intro/cvs-text.tex
U cvs-intro/cvs.bib
> cd cvs-intro
Es wird ein Unterverzeichnis angelegt, welches dem Modulnamen entspricht. Dorthin werden alle Dateien mit allen Unterverzeichnissen ausgecheckt.
Zusätzlich werden Unterverzeichnisse CVS angelegt, die Informationen über das Repository und die Dateiversionen enthalten. Deshalb kann bei den nachfolgenden Befehlen die Angabe des Repository entfallen.
2.2.2 Aktualieren der eigenen Arbeitskopie
[4, 10.2]
> cvs update
cvs update: Updating .
U cvs-text.tex
Wenn seit dem Auschecken der Arbeitskopie neue Versionen ins Repository eingecheckt wurden, werden
die Änderungen in die Arbeitskopie eingemischt.
2.2.3 Bestätigen von eigenen Änderungen
[4, 1.3.2]
> cvs commit
Checking in cvs.bib;
/home/ist/CVS-Repository/cvs-intro/cvs.bib,v
new revision: 1.3; previous revision: 1.2
done
<--
cvs.bib
Es werden alle Dateien, die sich in der Arbeitskopie geändert haben, ins Repository eingecheckt. Für die
Protokollmeldung wird ein Editor1 aufgerufen. Wenn sich die Arbeitskopie nicht mehr auf die aktuelle
Version im Repository bezieht, muß sie zuerst mit update (siehe 2.2.2) aktualisiert werden.
2.2.4 Zufügen von Dateien oder Unterverzeichnissen
[4, 7.1]
> cvs add file.c dir
Die Datei file.c und das Verzeichnis dir sollen über das Repository verwaltet werden. Sie werden
aber noch nicht eingecheckt. Hierzu muß das Kommando commit (siehe 2.2.3) aufgerufen werden.
2.2.5 Löschen von Dateien
> cvs remove file.c
> cvs remove -f file.c
[4, 7.2]
(oder)
Dem Repository wird mitgeteilt, daß die Datei file.c nicht mehr zum Modul gehört. In der Arbeitskopie muß diese Datei schon entfernt sein oder wird mit der Option -f gelöscht.
Die Datei wird erst beim Bestätigen mit commit (2.2.3) im Repository als gelöscht markiert. Damit
frühere Versionen rekonstruierbar bleiben, wird sie nicht endgültig gelöscht.
[4, S. 51]
Versehentlich gelöschte Dateien Sie können wieder rekonstruiert werden, wenn sie vor dem Bestätigen mit commit wieder mit add zugefügt werden.
1
Grundeinstellung ist mal wieder vi. Er kann mit den Umgebungsvariablen $CVSEDITOR bzw. $EDITOR eingestellt werden.
3
Konflikte und Kompromisse
5
> cvs remove -f file.c
> cvs add file.c
Gelöschte Dateien rekonstruieren Wenn eine Datei entfernt wurde und auch bestätigt wurde, dann
wird die Rekonstruktion aufwendiger. Grundsätzlich kann man zum Repository wieder Dateien zufügen,
die früher einmal gelöscht wurden. Die alte Datei muß also wieder aus dem Repository ausgecheckt
werden und neu zugefügt. Leider wird beim Auschecken einer speziellen Version immer das Sticky-Flag
(sticky tag) gesetzt. Das muß durch die Option -p umgangen werden.
> cvs update -r 1.9 -p file.c > file.c
> cvs add file.c
> cvs commit
2.2.6 Betrachten von Unterschieden
[4, 1.3.4]
> cvs diff cvs-text.tex
Index: cvs-text.tex
===================================================================
RCS file: /home/ist/CVS-Repository/cvs-intro/cvs-text.tex,v
retrieving revision 1.8
diff -r1.8 cvs-text.tex
150c150
<
cvs diff cvs-text.tex
-->
> cvs diff cvs-text.tex
> cvs diff -r 1.1 -D yesterday
Alle Änderungen, die in der Arbeitskopie an der Datei gemacht wurden, werden angezeigt. Über Optionen
können bestimmte Versionen oder Zeitpunkte bestimmt werden.
2.2.7 Freigabe der Arbeitskopie
[4, 1.3.3]
Da alle Aktionen im Repository protokolliert werden, sollten alle ausgecheckten Module nach ihrer Bearbeitung wieder freigegeben werden.
> cd ..
> cvs release -d cvs-intro
Hierbei wird überprüft, ob sich in der Arbeitskopie noch Änderungen befinden, die noch nicht eingecheckt
sind. Ansonsten werden die Dateien und Unterverzeichnisse gelöscht.
3 Konflikte und Kompromisse
Wenn mehrere BenutzerInnen an den selben Dateien arbeiten kommt es immer wieder vor, daß neue Versionen von anderen Personen eingecheckt werden. Danach bezieht sich die eigene Arbeitskopie nicht
mehr auf die gültige Version im Repository. Wenn man versucht, seine eigenen Änderungen einzuchecken, wird man darauf hingewiesen.
[4, 10.1]
> cvs commit
cvs commit: Examining .
cvs commit: Up-to-date check failed for ‘cvs-text.tex’
cvs commit: Examining cvs-intro
cvs [commit aborted]: correct above errors first!
Nun müssen die eigenen Dateien wieder auf die aktuelle Version im Repository gebracht werden.
[4, 10.2]
4
Versionsnummern und symbolische Namen: Tag
6
> cvs update
cvs update: Updating .
RCS file: /home/ist/CVS-Repository/cvs-intro/cvs-text.tex,v
retrieving revision 1.8
retrieving revision 1.9
Merging differences between 1.8 and 1.9 into cvs-text.tex
M cvs-text.tex
M cvs.bib
cvs update: Updating cvs-intro
Es werden die Änderungen, die von anderen durchgeführt wurden, ermittelt und in die eigene Kopie
eingemischt. Normalerweise gibt es wenig Probleme mit den Zusammenmischen. Wenn jedoch andere
Personen in einer Datei in unmittelbarer Nähe der eigenen Änderungen auch geändert haben, dann kann
CVS nicht entscheiden, welche der Änderungen übernommen werden sollen. Es werden beide Versionen
in die Datei eingemischt, im Quelltext entsprechend markiert und die Meldung
[4, 10.3]
C <file>
(für Conflict) ausgegeben. Deshalb sollte die Ausgabe dieses Kommandos beachtet werden.
[4, A.18.2]
Die Markierungen im Quelltext sehen wie folgt aus:
<<<<<<< cvs-text.tex
... Eigener Vorschlag
=======
... Fremder Vorschlag im Repository
>>>>>>> 1.15
Hier muß entschieden werden, wie der richtige Text aussehen soll. Danach kann diese gemischte Version
mit cvs commit eingecheckt werden.
4 Versionsnummern und symbolische Namen: Tag
[4, 4]
Die Versionsnummern werden von CVS automatisch vergeben. Wird eine geänderte Datei eingecheckt,
dann wird die Versionsnummer automatisch erhöht (siehe Abb. 1). Normalerweise erhält man die Folge
1.1, 1.2, . . . . Mehrere Entwicklungspfade nebeneinander kann man durch Verästelungen erreichen. Im
Laufe der Zeit entwickelt so jede Datei ihren eigenen Baum von Versionsnummern.
Beim Zusammenfassung in ein Modul haben zu einem gegebenen Zeitpunkt die Dateien unterschiedliche
Versionsnummern. Dateiversionen, die zusammen abrufbar sein sollen, können mit einem Tag markiert
werden. Damit wird ein symbolischer Name definiert, der in jeder Datei auf die entsprechende Version
verweist.
> cvs tag rev1_1
cvs tag: Tagging .
T cvs-abstract.tex
T cvs.bib
cvs tag: Tagging cvs-intro
5 Verzweigungen
Wenn mehrere EntwicklerInnen am selben Projekt arbeiten, kommt es oft vor, daß von einem stabilen
Zustand mehrere Entwicklungspfade weiterverfolgt werden. Hier kann jeder Pfad für sich konsistent sein
aber nicht zu den anderen Pfaden passen, bis sie wieder zusammengeführt werden. Dieses nebenläufige
Entwickeln unterstützt CVS mit Zweigen (branch) im Entwicklungsbaum.
[4, 4.4]
5.1 Anlegen eines Zweiges
7
br1
Ast: 1.2.2
cvs-abstract.tex
1.2.2.1
1.2.2.2
rel1_0
Ast: 1
1.2.2.3
rel1_1
1.1
1.2
1.3
1.4
1.5
1.2.3.1
1.2.3.2
1.2.3.3
Widi
Ast: 1.2.3
br2
cvs.bib
Ast: 1
rel1_0
1.1
1.2
1.3
1.4
1.3.2.1
1.3.2.2
Widi
Ast: 1.3.2
br1
rel1_1
Abbildung 1: Baum von Versionsnummern
5.1 Anlegen eines Zweiges
Jeder Zweig wird mit einem neuen symbolischen Namen (tag) eingeführt.
[4, 5.2]
> cvs tag -b br1
cvs tag: Tagging .
T cvs-text.tex
T cvs.bib
Hiermit wird nur im Repository eingetragen, daß von den aktuellen Versionen Zweige abgeführt werden
können. Die Zweige selbst werden noch nicht angelegt. Hierzu muß dieser Zweig (also die Dateiversionen
mit dem symbolischen Namen br1) ausgecheckt werden — bzw. die aktuelle Arbeitskopie aktualisiert
werden.
[4, 5.3]
> cvs update -r br1
cvs update: Updating .
Von nun an werden alle Änderungen in einem eigenen Zweig verwaltet, der erst beim nächsten Einchecken (siehe commit, 2.2.3) ins Repository eingetragen wird. Damit alle Repository-Zugriffe in diesem
Zweig bleiben, sind die Dateien mit dem sticky tag br1 versehen.
5.2 Beenden eines Zweiges
Es gibt i.A. zwei Möglichkeiten, den Entwicklungspfad zu beenden.
5.2.1 Abbrechen des Pfades
Wenn festgestellt wird, daß der Pfad nicht brauchbar ist, dann will man ihn vergessen und wieder auf den
Hauptpfad zurückkehren. Hierzu wird die Arbeitskopie aktualisiert und das sticky tag zurückgesetzt.
[4, 4.5]
6
Versionsinformationen in den Dateien
8
> cvs update -A
cvs update: Updating .
U cvs-text.tex
5.2.2 Übernehmen in den Hauptpfad
[4, 5.6]
Will man die Änderungen im Entwicklungspfad in die zentrale Entwicklung übernehmen, dann muß man
1. zum Hauptpfad zurückkehren,
2. alle Änderungen aus dem Entwicklungspfad in den Hauptpfad einmischen und
3. die neu entstandene Version wieder einchecken.
> cvs update -A -j br1
cvs update: Updating .
U cvs-text.tex
RCS file: /home/ist/CVS-Repository/cvs-intro/cvs-text.tex,v
retrieving revision 1.8
retrieving revision 1.8.2.1
Merging differences between 1.8 and 1.8.2.1 into cvs-text.tex
> cvs commit
Checking in cvs-text.tex;
/home/ist/CVS-Repository/cvs-intro/cvs-text.tex,v <-- cvs-text.tex
new revision: 1.9; previous revision: 1.8
done
6 Versionsinformationen in den Dateien
[4, 12]
Beim Auschecken von Dateien2 werden Informationen über die Version in die Dateien eingetragen. Wenn
in der Datei ein Text der Form $keyword$ steht wird er beim Auschecken zum Text $keyword: value $
expandiert. Eine Liste der wichtigsten Textvariablen ist in Tabelle 1 aufgeführt.
6.1 Informationen in Objekt-Dateien
Diese Textvariablen können auch benutzt werden, um die Versionsinformationen fest in die compilierten
Objekt-Dateien einzutragen. In den nachfolgenden Beispielen wird die Identifikation in C/C++-Texte und
in Java-Texte eingebettet.
static char[] rcsID =
"$Id: cvs-text.tex,v 1.8 1999/06/10 08:52:39 widi Exp $";
class MyClass
static private String rcsID =
"$Id: cvs-text.tex,v 1.8 1999/06/10 08:52:39 widi Exp $";
...
Zu beachten ist hierbei, daß der Variablenbezeichner (rcsID) nur lokal in einer Datei sichbar ist. Diese
Versionsinformationen können später mit dem Programm ident abgefragt werden.
> ident file.o MyClass.class
file.o:
$Id: cvs-text.tex,v 1.8 1999/06/10 08:52:39 widi Exp $
MyClass.class:
$Id: cvs-text.tex,v 1.8 1999/06/10 08:52:39 widi Exp $
2
und da nach dem Einchecken die neue Version sofort ausgecheckt wird, auch nach dem Einchecken
[4, 12.2]
6.1 Informationen in Objekt-Dateien
$Author: widi $
$Date: 1999/06/10 08:52:39 $
$Revision: 1.8 $
$State: Exp $
$Name: $ (symbolischer Namen, tag)
$RCSfile: cvs-text.tex,v $
$Source: /home/widi/CVS-Repository/vortraege/Tiw98/CVS-Einfuehrung/cvs-text.tex,v $
$Id: cvs-text.tex,v 1.8 1999/06/10 08:52:39 widi Exp $
$Header: /home/widi/CVS-Repository/vortraege/Tiw98/CVS-Einfuehrung/cvs-text.tex,v 1.8 1999/06/10 08:52:39 widi Exp $
$Log: cvs-text.tex,v $
Revision 1.8 1999/06/10 08:52:39 widi
- Rekonstruktion geloeschter Dateien
Revision 1.7 1999/03/08 09:28:17 widi
Tip: Auschecken neuer Verzeichnisse
Revision 1.6 1998/10/02 09:56:43 widi
Mit Einwaehlverbindung und Abstract
Revision 1.4 1998/09/28 22:59:06
Erstes Korrekturlesen
widi
Revision 1.3 1998/09/28 16:08:53
Die erste Version der Folien
widi
Revision 1.2 1998/09/28 14:47:42 widi
Doch nur 10pt-Schrift: spart Papier
Revision 1.1 1998/09/28 14:34:06 widi
Fertige Version des Textes für den Tagungsband
Tabelle 1: Textvariablen in CVS-Dateien
9
6.2 Probleme mit den Informationstexten
10
6.2 Probleme mit den Informationstexten
[4, 12.3]
Die Versionsinformationen, die bei jedem Auschecken aus dem Repository eingesetzt werden, können
auch an einigen Stellen stören. Wenn man die Änderungen des letzten Tages ansehen will, kann man das
folgende Kommando benutzen:
cvs diff -D yesterday -D now .
Hierbei werden von allen Dateien die Version von gestern und heute ausgecheckt und verglichen. Beim
Auschecken werden die Versionsinformationen eingetragen und erscheinen immer als geänderte Textstellen. Um dieses zu umgehen, kann man mit Optionen die Expansion der Versionsinformationen steuern
[4, Abschn. 12.3]. Die Option -kk trägt das Schlüsselwort, aber keine Werte in die Textvariablen ein.
cvs diff -kk -D yesterday -D now .
7 Mehrere BenutzerInnen
[4, 10.6]
Die Koordination zwischen mehreren EntwicklerInnen kann CVS mit einem System von Hinweismeldungen unterstützen. Dazu kann ein Repository so konfiguriert werden, daß bei bestimmten Aktionen
automatische eMail’s versandt werden. Die ersten beiden Schritte sind nur einmal im Repository einzutragen. Die weiteren Schritte haben alle BenutzerInnen zu erledigen.
7.1 Konfiguration der eMail-Aktionen
In jedem CVS-Repository gibt es ein spezielles Modul namens CVSROOT. Hier befinden sich einige
Textdateien, mit denen das Verhalten des Repository eingestellt wird. So auch die Aktionen, die beim
Einchecken von Änderungen durchgeführt werden.
In der Datei CVSROOT/notify wird eingetragen, welches Programm nach einer Aktion aufgerufen
wird. Diese Datei muß also
1. ausgecheckt,
2. um die Zeile
ALL /usr/ucb/Mail -s "CVS notification" %s
erweitert und
3. wieder eingecheckt werden.
[4, 10.6.2]
> cvs co CVSROOT/notify
> edit CVSROOT/notify
> cvs commit CVSROOT
In der Datei CVSROOT/loginfo wird das Verhalten beim Einchecken von Änderungen festgelegt. Hier
kann das Einchecken in einer Textdatei protokolliert werden oder — mit ein wenig Aufwand — ebenfalls
eMails an bestimmte Kennungen gesandt werden.
7.2 Meldungen aktivieren
[4, C.7]
[4, 10.6.1]
Bei jedem Modul muß im Repository einmal die Überwachung aktiviert werden.
> cvs watch on
Wenn dieses Modul von jemandem ausgecheckt wird, dann werden alle Dateien zum Schreiben gesperrt.
7.3 Meldungen empfangen
Wer automatisch informiert werden will wenn jemand auf ein Modul zugreift, muß diese Funktion aktivieren. Nachdem das Modul ausgecheckt ist, wird mit
[4, 10.6.2]
7.4 Änderungen beginnen
11
> cvs watch add
angezeigt, daß man die Meldungen empfangen will.
7.4 Änderungen beginnen
[4, 10.6.3]
Wenn jemand Dateien ändern will, dann muß dies zuerst mit
> cvs edit files
angemeldet werden. Alle BenutzerInnen, die diese Dateien überwachen, erhalten eine eMail und können
darauf reagieren. Gleichzeitig wird der Schreibschutz entfernt und die Dateien können bearbeitet werden.
7.5 Änderungen beenden
Beim Einchecken mit cvs commit werden wiederum die anderen BenutzerInnen informiert und der
Schreibschutz der Dateien erneut aktiviert.
Man kann auch mit cvs unedit die Bearbeitung beenden. Hierbei werden wiederum die anderen BenutzerInnen informiert und der Schreibschutz aktiviert.
7.6 Informationen abfragen
Mit den Kommandos cvs watchers und cvs editors kann man ermitteln, wer bei welcher Aktion
informiert werden will, bzw. wer gerade an einer Datei arbeitet.
8 Weitere Funktionen
CVS bietet noch einige Ausbaumöglichkeiten:
1. Über die integrierte Internetschnittstelle kann weltweit auf einen Repository-Server zugegriffen
werden. Für gesicherte Zugriffe werden unterschiedliche Identifikationsprotokolle unterstützt.
2. CVS ist auf fast allen Plattformen verfügbar.
3. Das Verhalten des Repository ist über Script-Dateien sehr flexibel einstellbar. Beispielsweise kann
beim Kommando cvs export3 automatisch eine HTML-Dokumentation (z.B. mit javadoc) erzeugt und installiert werden.
4. Durch Modulabhängigkeiten läßt sich Struktur im Repository realisieren.
9 Tools und GUI’s zu CVS
Es gibt einige Tools und Oberflächen, die die Arbeit mit CVS erleichtern. Beim Arbeiten mit Oberflächen,
die neben den Editoren laufen muß beachtet werden, daß die Dateien durch das Einchecken geändert
werden (siehe Abschn. 6). Nach dem Einchecken müssen die Dateien also neu in die Editoren geladen
werden.
3
Damit wird eine Version erzeugt, die ausgeliefert wird.
[4, 10.6.3]
[4, 10.6.4]
9.1 CVSWEB: WWW-Browser zum Blättern im Repository
12
PCL-CVS release 1.05 from CVS release $Name: $.
Copyright (C) 1992, 1993 Per Cederqvist
Pcl-cvs comes with absolutely no warranty; for details consult the manual.
This is free software, and you are welcome to redistribute it under certain
conditions; again, consult the TeXinfo manual for details.
In directory /home/widi/vortraege/Tiw98/CVS-Einfuehrung:
Unknown
cvs-text.ps
Merged
ci cvs-text.tex
Unknown
cvs-f1.eps
Unknown
cvs-f2.eps
Modified ci cvs.bib
Abbildung 2: Emacs-Erweiterung pcl-cvs
Abbildung 3: tkCVS
Abbildung 4: jCVS
9.1 CVSWEB: WWW-Browser zum Blättern im Repository
Über CGI-Scripte wird das CVS-Repository als WWW-Seiten dargestellt. Es kann durch die Dateiversionen geblättert und unterschiedliche Versionen verglichen werden.
http://www.cyclic.com/cyclic-pages/web-cvsweb.html
)
9.2 Emacs
Die Versionsverwaltung von Emacs kann seit einiger Zeit mit CVS-Repositories umgehen. Somit kann
man mit einer standardisierten Schnittstelle die CVS-Dateien ein- und auschecken.
C-h i g (XEmacs)Version Control[Return]
)
Eine andere Oberfläche bietet das Paket pcl-cvs, welches mit CVS geliefert wird. Durch M-x cvs-update
werden alle Dateien eines Modules aktualisiert und man erhält eine dired-ähnliche Liste der Dateien, an
denen etwas geändet wurde. In dieser Liste wird der Status der Dateien im Klartext und nicht durch
einzelne Buchstaben beschrieben (siehe Abb. 2).
9.3 Graphische Oberflächen
Es gibt verschiedene Oberflächen, die den Zugriff auf das CVS-Repository über einen File-Browser realisieren. In den Abb. 3 und 4 sind Oberflächen dargestellt, die TCL/TK oder Java benötigen. Für Windows95/NT gibt es WinCVS. Die normalen Aktionen, wie aus- oder einchecken, sind bei diesen Oberflächen i.A. auf Buttons oder in Kontextmenus untergebracht.
A Zugriff über Einwählverbindungen
13
)
)
)
tkCVS http://www.cyclic.com/tkcvs/index.html
http://www.cyclic.com/jcvs/index.html
jCVS
WinCVS
http://www.cyclic.com/cvs/soft-maccvs.html
A Zugriff über Einwählverbindungen
Auch vom heimischen Rechner aus kann auf das Repository zugegriffen werden. Die Einwählverbindung
per Modem muß installiert sein und funktionieren.
A.1 Linux
Unter Linux stellt nun der heimische Rechner einen beliebigen Rechner im Internet dar. Hierfür empfehle
ich den Zugang über die Secure Shell (SSH)4 . Die Identifizierung der SSH sollte so konfiguriert sein, daß
ein Login ohne Eingabe des eigenen Kennwortes möglich ist.
1. Auf dem heimischen Rechner das Programm ssh-keygen aufrufen. Der private Schlüssel wird in
$HOME/.ssh/identity gespeichert und keine passphrase eingegeben. Der öffentliche Schlüssel wird unter $HOME/.ssh/identity.pub gespeichert.
2. Der öffentliche Schlüssel muß in die Datei $HOME/.ssh/authorized_keys der eigenen
Kennung auf dem Uni-Netzwerk einzutragen werden. Beim flg. Beispiel wird noch bei jedem Kommando nach dem Kennwort gefragt.
> ssh zaphod mkdir .ssh
> cat ~/.ssh/identity.pub | ssh zaphod cat ’>>’ .ssh/authorized_keys
3. Zum Testen loggt man sich am Besten einmal ein:
> slogin zaphod
Dieses sollte ohne Abfrage des Kennwortes funktionieren.
Nach diesen Vorbereitungen kann man das CVS-Repository über das RSH-Protokoll ansprechen. Da die
SSH statt der RSH benutzt wird, muß noch eine Umgebungsvariable gesetzt werden.
[4, 2.9.2]
setenv CVS_RSH ssh
setenv CVSROOT :ext:widi@zaphod.uni-koblenz.de:/home/ist/CVS-Repository
A.2 MS-Windows 95/NT
Unter MS-Windows kann man
1. ebenfalls das SSH-Protokoll benutzen (siehe oben), sofern die Lizenzgebühren dafür bezahlt sind,
oder
2. sich mit einem Netzlaufwerk verbinden und somit das Repository als lokal erreichbare Platte ansprechen.
Da man i.A. nur das eigene Home-Verzeichnis mounten kann, muß man zuerst einen symbolischen Link
anlegen:
unix> ln -s /home/ist/CVS-Repository ~/CVS-Repository
Nun kann das Home-Verzeichnis als Netzlaufwerk verbunden werden (z.B. Laufwerksbuchstaben Z:)
und das Repository unter
win> cvs -d :local:Z:/CVS-Repository ...
angesprochen werden.
4
In der SuSE-Distribution seit ca. SuSE-5.1.
B Tips — Fragen und Antworten
14
B Tips — Fragen und Antworten
Neue Verzeichnisse werden nicht ausgecheckt. Beim Aktualisieren des eigenen Arbeitsverzeichnis (mit
cvs update) werden neue Verzeichnisse, die von anderer Seite dem Modul zugefügt wurden,
nicht ausgecheckt.
Hintergrund: Wenn nur einzelne Teile eines Modules benötigt werden, dann können nicht benötigte Teile mit release (siehe Abschnitt 2.2.7) gelöscht werden. Da sich CVS merkt, welche Verzeichnisse von einem Modul ausgecheckt sind, werden gelöschte Verzeichnisse beim
Aktualisieren mit update nicht wieder ausgecheckt. Dieses betrifft auch Verzeichnisse, die
neu ins Repository eingetragen wurden, da sie im Arbeitsverzeichnis noch nicht ausgecheckt
sind.
Lösung: Mit der Option -d beim update werden fehlende Verzeichnis angelegt. Somit werden
mit cvs update -d auch alle in der Arbeitskopie fehlenden Verzeichnisse angelegt.
Mit cvs update -d dir wird das Verzeichnis dir aktualisiert, auch wenn es noch nicht
vorhanden ist.
Literatur
[1] B ERLINER , B RIAN: CVS II: Parallizing Software Development.
File cvs-1.10/doc/
cvs-paper.ps in http://download.cyclic.com/pub/cvs-1.10/cvs-1.10.
tar.gz
Kurzer Überblick mit Anleitung wie fremde Quelltexte auf dem eigenen System mit lokalen Änderungen verwaltet werden.
[2] B LANDY, J IM: Introduction to CVS. Technischer Bericht Cyclic Software, 1996. File http://
download.cyclic.com/pub/training/intro-a4.ps
Kurzer Einführungskurs in Englisch.
[3] C EDERQVIST, P ER: CVS Client/Server. File cvs-1.10/doc/cvsclient.ps in http://
download.cyclic.com/pub/cvs-1.10/cvs-1.10.tar.gz
Beschreibung des Internet-Protokolls zwischen Client und Server.
[4] C EDERQVIST, P ER, ROLAND P ESCH, and DAVID G. G RUBBS: Version Management with CVS.
Signum Support AB, Linkoping, Sweden, for cvs 1.10 edition, 1998. File cvs-1.10/doc/cvs.
ps in http://download.cyclic.com/pub/cvs-1.10/cvs-1.10.tar.gz
Ausführliche Bedienungsanleitung.
[5] D REILINGER , S EAN: CVS version control for web site projects. Technical report, Interactivate Consulting Group, Del Mar, Canada, April 1998. File http://interactivate.com/public/
cvswebsites/howto-cvs-websites.ps.gz
Verteilte Entwicklung von WWW-Seiten mit zentraler Koordination durch CVS.
[6] S CHROEDER , U LRIK: SE 94/95 — Versionskontrolle. Vorlesungsskript der Veranstaltung SoftwareEngineering 95 an der TH-Darmstadt. Datei http://www.informatik.th-darmstadt.
de/PI/SE94-95/Skript/scm/scm-state/s%cm-state.html
Vergleicht verschiedene VC-Werkzeuge miteinander.