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.