KAPITEL 2 Schnelleinstieg in CVS

KAPITEL 2 Schnelleinstieg in CVS
KAPITEL 2
Schnelleinstieg in CVS
Damit Sie einen raschen Einstieg in CVS finden, erläutert dieses Kapitel die häufigsten
CVS-Operationen. Die Befehle und Beispiele in diesem Kapitel sind Standardsituationen
entnommen und beziehen nur die gebräuchlichsten Optionen mit ein. In späteren Kapiteln werden diese Themen noch gründlicher behandelt.
Die Beispiele und Anleitungen in diesem Kapitel basieren auf dem CVS-Kommandozeilen-Client für Unix/Linux. Da die meisten grafischen Clients die Namen der CVS-Befehle
für ihre Menüoptionen und Schaltflächen verwenden, kann jeder Leser, der einen solchen Client verwendet, diesem Kapitel leicht folgen. Grafische Clients und Clients für
andere Betriebssysteme als Unix oder Linux werden in Anhang A beschrieben.
Vielleicht müssen Sie dieses Kapitel gar nicht komplett lesen. Halten Sie sich an folgende
Grundsätze:
• Wenn Sie an einem bestehenden Projekt arbeiten, das bereits in CVS gespeichert ist,
überspringen Sie die ersten Abschnitte und beginnen bei »Dateien auschecken«.
• Wenn CVS bei Ihnen bereits installiert ist und läuft und ein Repository für Ihr Projekt zur Verfügung steht, gehen Sie direkt zum Abschnitt »Projekte importieren«.
Wenn Sie nicht sicher sind, ob CVS bereits installiert ist und läuft, lesen Sie den ersten
Teil von »Installation von CVS«: Hier erfahren Sie, was Sie überprüfen sollten. Wenn Sie
nicht wissen, ob ein Repository vorhanden ist, suchen Sie das Verzeichnis CVSROOT.
Die Wurzel des Repositorys ist das Verzeichnis, in dem CVSROOT liegt. Die restlichen
Verzeichnisse auf der oberen Ebene des Repositorys sind CVS-Projekte.
Installation von CVS
CVS ist eine Client/Server-Software, die auf Unix- und Linux-Systemen läuft. Wenn Sie
CVS auf einem Unix-/Linux-Server installieren, bekommen Sie automatisch sowohl die
Server- als auch die Client-Software. Um über das Netzwerk mit einem beliebigen
Unix-/Linux-Computer auf CVS zuzugreifen, installieren Sie einfach CVS auf dem betreffenden Rechner. Die Server- und Client-Software ist ein- und dasselbe.
|
9
CVS kann von http://www.cvshome.org heruntergeladen werden. Das Programm steht
auch als Installations-Package in vielen GNU/Linux-Distributionen zur Verfügung, darunter Debian, Red Hat und SuSE.
Wenn Sie GUI-Clients bevorzugen, empfehle ich einen Besuch bei http://www.wincvs.org. Dort finden Sie gCVS, WinCVS und MacCVS, die GUI-Clients für Unix und
GNU/Linux, Windows und Macintosh (vor OS X).1
Wenn Sie Macintosh mit OS X benutzen, können Sie den standardmäßigen CVS-Server und -Client für Unix installieren.
Ein Windows-kompatibler CVS-Server ist unter http://www.cvsnt.org zu bekommen. Dieser ist zwar nicht identisch mit dem Unix-Server, aber die Unterschiede stehen klar und
deutlich in den FAQs, und zusätzlich ist auf der Website auch eine Installationsanleitung
erhältlich.
Wenn Sie das Secure Shell-(SSH-)Protokoll für sichere Verbindungen zwischen CVS-Clients- und -Servern benutzen möchten, müssen Sie kompatible Versionen von SSH auf
Client und Server installieren. Für Clients müssen Sie unter Umständen eine SSH-Version
finden, die auf der Befehlszeile ausgeführt werden kann. Weitere Informationen zu diesem Thema finden Sie unter »Zugriff auf Remote-Repositorys«.
Die OpenSSH-Website (http://www.openssh.com) ist ein guter Ausgangspunkt für die
Suche nach Informationen über SSH und SSH-Clients. Außerdem empfehle ich die Lektüre von SSH, The Secure Shell: The Definitive Guide (O’Reilly) von Daniel J. Barrett,
Ph.D. und Richard Silverman. Jede nur erdenkliche Frage wird bei den SSH-FAQs unter
http://www.employees.org/~satch/ssh/faq/ beantwortet. Die Google-Liste von Dokumentationen über SSH finden Sie unter http://directory.google.com/Top/Computers/Security/
Products_and_Tools/Cryptography/SSH/Documentation/.
Bei den meisten Unix- und Linux-Systemen ist ein SSH-Client bereits als Standardprogramm installiert. Auch bei Mac OS X ist ein SSH-Client vorinstalliert. Und wenn er
nicht automatisch mitinstalliert wurde, ist ein SSH-Client normalerweise in jeder Distribution als optionales Programm enthalten.
Auf der Website für MacCVS können Sie einen guten Artikel über SSH für Macintosh unter
http://www.heilancoo.net/MacCVSClient/MacCVSClientDoc/ssh.html lesen. Die Anleitungen sind für jeden Macintosh-basierten CVS-Client von Nutzen.
Um einen SSH-Client für Windows ausfindig zu machen, beginne ich meine Suche auf
der OpenSSH-Website zu Windows- und Macintosh-Clients (http://www.openssh.com/
windows.html). 2
1 Alternativen finden Sie unter http://www.tortoisecvs.org/ oder http://www.lincvs.org/ (Anm. des Gutachters).
2 http://directory.google.com/Top/Computers/Security/Products_and_Tools/Cryptography/SSH/Clients/ ist eine
weitere Möglichkeit (Anm. des Gutachters).
10
| Kapitel 2: Schnelleinstieg in CVS
Sollten Sie Unix oder Linux benutzen, ist CVS möglicherweise bereits bei Ihnen installiert. Wenn es in Ihrem Pfad installiert ist, fördert die Eingabe von cvs auf der Befehlszeile
die in Beispiel 2-1 gezeigten Resultate zu Tage.
Beispiel 2-1: Anzeige der CVS-Hilfe
$ cvs
Usage: cvs [cvs-options] command [command-options-and-arguments]
where cvs-options are -q, -n, etc.
(specify --help-options for a list of options)
where command is add, admin, etc.
(specify --help-commands for a list of commands
or --help-synonyms for a list of command synonyms)
where command-options-and-arguments depend on the specific command
(specify -H followed by a command name for command-specific help)
Specify --help to receive this message
The Concurrent Versions System (CVS) is a tool for version control.
For CVS updates and additional information, see
the CVS home page at http://www.cvshome.org/ or
Pascal Molli’s CVS site at http://www.loria.fr/~molli/cvs-index.html
Sofern CVS bereits installiert ist, können Sie diesen Abschnitt übergehen und gleich den
Abschnitt »Ein erstes Repository« aufschlagen.
Zur Installation von CVS auf Unix laden Sie den Quellcode des Programms herunter und
kompilieren ihn auf Ihrem System. Das funktioniert auch bei Linux, doch bieten viele
Linux-Distributionen auch die Möglichkeit, bereits vorkompilierte CVS-Binarys zu
installieren. Nach dem folgenden Abschnitt, in dem es um die CVS-Installation aus
Quelldateien geht, wird auch die Installation für verschiedene Linux-Distributionen
erläutert.
CVS aus dem Quellcode installieren
Laden Sie die komprimierte .tar-Datei von http://www.cvshome.org herunter, dekomprimieren Sie sie und packen Sie das Archiv aus. Wenn Sie die Quelldateien auch nach der
Kompilierung noch bewahren möchten, entpacken Sie die .tar-Datei in das Verzeichnis
/usr/src/cvs. Ansonsten können Sie das Dekomprimieren und Auspacken des Archivs in
/tmp vornehmen. Als Nächstes wechseln Sie mit cd zum cvs-Verzeichnis, lesen die
INSTALL- und die README-Datei und führen dort die Befehle aus. Anfänger sollten
automake und autoconf deaktivieren.
Für die Kompilierung von CVS sollten Sie keine Superuser-Rechte einschalten, aber für die Installation benötigen Sie sie (für make install).
Beispiel 2-2 zeigt eine Beispielinstallation vom Quellcode. Ich dekomprimiere und entpacke die .tar-Datei in /tmp und gehe dann in das oberste Verzeichnis des resultierenden
Installation von CVS
| 11
Quellbaums. Als nächste Schritte sieht die INSTALL-Datei für CVS 1.11.5 vor, dass
zuerst das mitgelieferte configure-Skript und nach seinem erfolgreichen Abschluss make
ausgeführt wird. Zum Schluss melden Sie sich als Root-User an und lassen make install
laufen.
Beispiel 2-2: Installation von der Quelle
/tmp$ ls
cvs-1.11.5.tar.gz
/tmp$ gunzip cvs-1.11.5.tar.gz
/tmp$ tar -xpf cvs-1.11.5.tar
/tmp$ cd cvs-1.11.5
/tmp/cvs-1.11.5$ ./configure
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
.
.
.
creating config.h
config.status: executing depfiles commands
/tmp/cvs-1.11.5$ make
make all-recursive
make[1]: Entering directory `/tmp/cvs-1.11.5'
.
.
.
make[2]: Leaving directory `/tmp/cvs-1.11.5'
make[1]: Leaving directory `/tmp/cvs-1.11.5'
/tmp/cvs-1.11.5$ su root
Password:
/tmp/cvs-1.11.5$ make install
Making install in lib
make[1]: Entering directory `/tmp/cvs-1.11.5/lib'
.
.
.
make[2]: Leaving directory `/tmp/cvs-1.11.5'
make[1]: Leaving directory `/tmp/cvs-1.11.5'
/tmp/cvs-1.11.5$
CVS-Installation mit apt
apt ist der Package-Manager, der in Debian Linux und Debian-basierten Distributionen
verwendet wird. Vergewissern Sie sich, dass Ihre apt-Quellliste eingerichtet ist, und führen Sie vor der Installation von CVS apt-get update aus. Da das CVS-Package cvs heißt,
lautet der Installationsbefehl:
apt-get install cvs
Beispiel 2-3 zeigt eine apt-Installation, wobei die meisten Ergebnisse des Befehls apt-get
update weggelassen wurden.
12
| Kapitel 2: Schnelleinstieg in CVS
Beispiel 2-3: Installation mit apt
$ apt-get update
.
.
.
Reading Package Lists... Done
Building Dependency Tree... Done
$ apt-get install cvs
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
cvs
0 packages upgraded, 1 newly installed, 0 to remove and 10 not upgraded.
Need to get 0B/1085kB of archives. After unpacking 2626kB will be used.
Reading changelogs... Done
Preconfiguring packages ...
Selecting previously deselected package cvs.
(Reading database ... 39545 files and directories currently installed.)
Unpacking cvs (from .../cvs_1.11.1p1debian-8_i386.deb) ...
Setting up cvs (1.11.1p1debian-8) ...
CVS-Installation mit rpm
rpm ist der Package-Manager von Red Hat Linux. CVS befindet sich auf der zweiten CDROM der Red Hat-Distribution 7.3. Bei den folgenden Instruktionen setze ich voraus,
dass Sie die CD in das Laufwerk eingelegt und gemountet haben oder dass das Package
auf andere Weise für den Package-Manager zugänglich gemacht wurde.
Wenn Sie rpm auf der Befehlszeile laufen lassen, müssen Sie auf der CD den Namen des
CVS-Packages nachschauen. Er hat das Format cvs-version.rpm. Zur Installation von
CVS benutzen Sie folgenden Befehl:
rpm -Uh cvs-version.rpm
Wenn der Befehl Erfolg hat, sehen Sie keine Ausgabe. Falls Sie Fortschrittsanzeigen
mögen, können Sie den Argumenten -v (für »verbose«, den ausführlichen Modus) hinzufügen. Beispiel 2-4 zeigt eine Befehlszeilen-Installation im ausführlichen Modus.
Beispiel 2-4: Installation mit rpm
$ rpm -Uvh cvs-1.11.1p1-7.i386.rpm
Preparing...
############################### [100%]
1:cvs
############################### [100%]
Wenn Sie Gnome besitzen, verwenden Sie wahrscheinlich GnoRPM:
1. Wählen Sie INSTALL. Dieser Befehl öffnet ein neues Fenster und lädt die Packages
von der CD-ROM.
2. Öffnen Sie den Ordner Packages und dann die Unterordner Development und Tools.
3. Wählen Sie das Package cvs-version aus (derzeit cvs-1.11.1p1-7).
4. Klicken Sie auf INSTALL.
Installation von CVS
| 13
Abbildung 2-1 zeigt ein Beispiel mit GnoRPM.
Abbildung 2-1: GnoRPM-Installation
Wenn Sie KDE verwenden, benutzen Sie KPackage:
1. Wählen Sie die Registerkarte NEW. Nun müssten die Packages von der CD-ROM
geladen werden.
2. Suchen Sie das cvs-Package und wählen Sie es aus.
3. Klicken Sie auf INSTALL. Wenn sich dann ein neues Fenster öffnet, klicken Sie zur
Bestätigung abermals auf INSTALL.
Abbildung 2-2 zeigt ein Beispiel mit KPackage.
CVS-Installation mit yast
yast ist der Package-Manager von SuSE Linux. CVS befindet sich auf der zweiten CDROM von SuSE 7.3, kann aber in späteren Versionen auch auf einer anderen CD-ROM
oder in einer anderen Gruppe als in der nachfolgenden Liste vorliegen. Legen Sie die CD
in Ihr CD-ROM-Laufwerk ein und starten Sie das YaST2-Kontrollcenter:
14
| Kapitel 2: Schnelleinstieg in CVS
Abbildung 2-2: Kpackage-Installation
1. Wählen Sie SOFTWARE und öffnen Sie INSTALL/REMOVE SOFTWARE.
2. Wählen Sie die Gruppe DEVELOPMENT/VERSION CONTROL.
3. Gehen Sie zu cvs und klicken Sie auf OK.
4. Wenn die CD-ROM nicht im Laufwerk und gemountet ist, wird YaST2 dies nun
fordern.
Abbildung 2-3 zeigt ein Beispiel für eine YaST2-Installation.
Ein erstes Repository
CVS stützt sich auf eine dateibasierte Datenbank, die man das CVS-Repository (oder
Archiv) nennt. Das Repository muss auf einem Computer liegen, der genügend Speicherplatz hat, um Ihre Dateien und alle Änderungsdaten für Ihre Projekte aufzunehmen.
Außerdem müssen alle Benutzer von ihren Workstations aus auf das Repository zugreifen können.
Wenn das Repository auf einem Remote-Computer liegt, sollte der Benutzerzugriff über
SSH stattfinden. Sorgen Sie dafür, dass der Server einen SSH-Server und die Workstations
einen dazu kompatiblen SSH-Client ausführen. Weitere Informationen über RemoteRepositorys und SSH finden Sie weiter unten in diesem Kapitel im Abschnitt »Zugriff auf
Remote-Repositorys«. In Kapitel 8 werden Remote-Repositorys vollständig erklärt.
Ein erstes Repository
| 15
Abbildung 2-3: Yast2-Installation
Bei jedem Projekt müssen Sie gewährleisten, dass auf der Festplatte genug Platz ist, um
das Projekt in seiner voraussichtlich endgültigen Größe dreimal unterzubringen. Sofern
Sie vorhaben, Binärdateien zu speichern, müssen Sie mindestens das Fünffache rechnen.
Nach dem ersten Projekt haben Sie ein Gefühl dafür entwickelt, wie viel Platz Sie reservieren müssen.
In einem einzigen Repository können viele Projekte gespeichert werden. Wenn Sie ein
Repository anlegen, das unter Umständen mehrere Projekte unbekannter Größe aufnehmen muss, müssen Sie so gut wie möglich den Platzbedarf abschätzen und vorher wissen,
wo Sie später den benötigten Platz herbekommen können.
Ein CVS-Repository besteht aus Benutzerdaten. Es sollte auf einer Partition liegen, von
der Backups erstellt werden und die den Rechner nicht zum Absturz bringt, wenn sie
vollläuft. Repositorys werden oft in /cvsroot, /var/lib/cvsroot, /home/cvsroot oder /usr/
local/cvsroot gespeichert. Gemäß dem Filesystem Hierarchy Standard (siehe http://www.
pathname.com/fhs/) ist /var/lib/cvsroot der beste Speicherort für ein Repository.
Eine andere Möglichkeit besteht darin, das Repository in /cvsroot abzulegen. Das können sich die meisten Nutzer am besten merken.
16
| Kapitel 2: Schnelleinstieg in CVS
Beispiel 2-5 veranschaulicht, was zur Erstellung eines Repositorys dazugehört. Zuerst
müssen Sie das Wurzelverzeichnis auf dem CVS-Server anlegen. In Beispiel 2-5 erstelle
ich das Verzeichnis /var/lib/cvsroot.
Beispiel 2-5: Erstellung eines Repositorys
$ mkdir /var/lib/cvsroot
$ chgrp anthill /var/lib/cvsroot
$ ls -ls /var/lib
total 2
drwxr-xr-x
2 root
anthill
$ chmod g+srwx /var/lib/cvsroot
$ ls -la /home
total 2
drwxrwsr-x
2 root
anthill
$ cvs -d /var/lib/cvsroot init
$ ls -la /home
total 3
drwxrwsr-x
3 root
anthill
$ ls -la /var/lib/cvsroot
total 12
drwxrwsr-x
3 root
anthill
drwxrwsr-x
10 root
staff
drwxrwsr-x
3 root
anthill
$ chown -R cvs /var/lib/cvsroot
4096 Jun 28 16:31 cvsroot
4096 Jun 28 16:33 cvsroot
4096 Jun 28 16:56 cvsroot
4096 Jun 28 16:56 .
4096 Jun 28 16:35 ..
4096 Jun 28 16:56 CVSROOT
Damit andere das Repository benutzen können, erstellen Sie eine Unix-Gruppe für CVSBenutzer und ändern das Wurzelverzeichnis des Repositorys mit chgrp in diese Gruppe
um. Fügen Sie der Gruppe Benutzer hinzu, indem Sie den passenden Befehl Ihres Systems
verwenden (oft gpasswd). Setzen Sie das SGID-Bit des Verzeichnisses, damit Dateien, die
darin angelegt werden, die Gruppen-ID des Verzeichnisses haben. Damit ersparen Sie
sich später viel Ärger. Geben Sie der Gruppe Schreib-, Lese- und Ausführungszugriff auf
das Verzeichnis.
Um Sicherheitsrisiken zu minimieren, legen Sie als Besitzer des Repositorys und der
Administrationsdateien einen Benutzer namens cvs an. Mit chown übereignen Sie das
Wurzelverzeichnis und die Administrationsdateien des Repositorys diesem Benutzer.
Sicherheitsfragen werden in Kapitel 6 genauer erläutert.
Mit folgendem Befehl machen Sie das Verzeichnis Ihrer Wahl zu einem CVS-Repository:
cvs -d repository_wurzelverzeichnis init
CVS-Befehle haben folgendes Format:
cvs [cvs-optionen] befehl [befehlsoptionen]
Die CVS-Optionen beeinflussen das Verhalten von CVS als Ganzes und die Befehlsoptionen das Verhalten eines einzelnen CVS-Befehls. Dies wird in Kapitel 3 genauer erläutert.
Beispiel 2-5 veranschaulicht den gesamten Vorgang der Erstellung eines Verzeichnisses
und eines CVS-Repositorys darin. In diesem Fall lautet die CVS-Option -d repository_
Ein erstes Repository
| 17
pfad und der Befehl init. Eine Befehlsoption gibt es nicht. anthill ist der Name der
Gruppe, die Zugriff auf CVS bekommt, und cvs der Name des CVS-Besitzers.
Debian Linux hat ein Skript namens cvs-makerepos, das ein Repository auf
der Grundlage vorhandener Debian-Konfigurationsskripten aufbaut. In
man cvs-makerepos und man cvsconfig finden Sie Informationen über ein
automatisiertes System zur Konfiguration eines Debian-CVS-Repositorys.
Mit der Einrichtung des Repositorys entsteht zugleich ein Platz zum Speichern von
Projekten und ein spezielles CVSROOT-Verzeichnis, das die Konfigurations- und Metadaten-Dateien enthält. In Kapitel 6 wird dieses Verzeichnis genauer beschrieben. Projekte
werden in Unterverzeichnissen des Repository-Wurzelverzeichnisses gespeichert, in unserem Beispiel in /var/lib/cvsroot.
Projekte importieren
Wenn Sie ein neues Repository angelegt haben, möchten Sie wahrscheinlich Ihr erstes
Projekt importieren: eine Sammlung zusammengehöriger Dateien, die in demselben Verzeichnis gespeichert sind. Es ist auch möglich, nur eine einzelne Datei unter CVS zu speichern, doch auch diese ist dann ein Projekt und muss in ihrem eigenen Projektverzeichnis
abgelegt werden. CVS muss in der Lage sein, ein Unterverzeichnis zur Speicherung der
Metadaten über das Projekt erzeugen zu können.
Ihr Repository kann ein Projekt enthalten – oder auch viele verschiedene
Projekte. CVS lässt sich gut skalieren: Ein Repository kann einer einzelnen
Person dienlich sein, die nur eine kleine Aufgabe zu erledigen hat, es kann
aber auch von einer großen Firma verwendet werden, um eine Versionskontrolle für hunderte von einzelnen Gruppen bereitzustellen.
Bevor Sie ein Projekt in CVS laden, müssen Sie sich die Projektstruktur anschauen. Wenn
Sie eine Datei verschieben, nachdem sie in CVS erzeugt und gespeichert wurde, wird sie
von CVS als zwei Dateien behandelt: das Original an seinem ursprünglichen Speicherort
und die neue Datei an dem neuen Speicherort. Die History der Datei wird ebenfalls in
zwei Teile aufgespalten. Daher sollten Sie über die Struktur der Quelldateien eines Projekts entscheiden, bevor Sie es in CVS importieren.
Wenn Sie Ihre Projektdateien später auf mehrere unzusammenhängende Verzeichnisse
verteilen möchten, entwickeln Sie das Projekt am besten unter einem einzelnen Wurzelverzeichnis und verteilen die Dateien dann mit dem Installationsskript. In Kapitel 7 werden Fragen der Projektstruktur detaillierter behandelt.
Wenn Sie Binärdateien oder andere Dateien haben, die kein einfacher Text
sind, lesen Sie am besten die Informationen über Binärdateien in Kapitel 3
nach, bevor Sie sie in das Repository einbringen.
18
| Kapitel 2: Schnelleinstieg in CVS
Legen Sie nun die Anfangsstruktur des Projekts an, etwa im Verzeichnis /tmp. Sobald das
Projekt in CVS gespeichert ist, kann diese erste Version gelöscht werden. Da Sie sie nicht
als Sandbox benutzen werden und das Projekt in CVS hineinkopiert wurde, gibt es keinen Grund, sie zu behalten.
Wenn die Anfangsstruktur steht, können Sie die ersten benötigten Dateien hinzufügen.
Gehen Sie dazu in das Wurzelverzeichnis des Projekts und importieren Sie dort das Projekt mit dem Befehl:
cvs -d repository_pfad import projektname hersteller_tag release_tag
Wenn das Repository auf dem lokalen Computer liegt, geben Sie als Pfad den vollständigen Pfad zum Repository-Verzeichnis an. Liegt es auf einem Remote-Server, geben Sie
den Pfad so an, wie es unter »Zugriff auf Remote-Repositorys« beschrieben wird.
In den meisten Fällen brauchen Sie nichts Näheres über Hersteller- und Release-Tags zu
wissen. CVS verlangt zwar, dass sie angegeben werden, aber Sie können zunächst einfach
den Projektnamen als Hersteller-Tag und den Namen der aktuellen Revision als ReleaseTag einsetzen. Die Namen müssen mit einem Buchstaben beginnen und dürfen nur
alphanumerische Zeichen, Unterstriche und Bindestriche enthalten. Beispiel 2-6 zeigt die
Erstellung einer Projektstruktur und einiger Projektdateien sowie den anschließenden
Import des Projekts in CVS.
Das Hersteller- und das Release-Tag werden in Kapitel 8 erklärt.
Beispiel 2-6: Ein Projekt importieren
/tmp$ mkdir example
/tmp$ touch example/file1
/tmp$ touch example/file2
/tmp$ cd example
/tmp/example$ cvs -d /var/lib/cvsroot import example example_project ver_0-1
Nachdem Sie die Befehle aus Beispiel 2-6 ausgeführt haben, öffnet CVS ein Editor-Fenster, wie in Abbildung 2-4 dargestellt. Geben Sie eine Nachricht ein, um sich später noch
daran zu erinnern, was Sie mit diesem Projekt vorhatten.
Die Zeilen, die im Editor-Fenster mit »CVS:« anfangen, werden nicht in die History des
Projekts aufgenommen. Den im Editor angezeigten Text können Sie mit der in Kapitel 7
beschriebenen Datei rcsinfo konfigurieren.
Der Standard-Editor ist vi. Sie müssen das Zeichen i eingeben, bevor Sie Text einfügen
können. Danach kehren Sie mit ESC in den Modus zurück, in dem Sie den Cursor bewegen können. Die Bewegungstasten sind h, j, k und l. Um zu speichern und das Programm
zu verlassen, drücken Sie ESC, gefolgt von :wq RETURN. In Kapitel 3 erfahren Sie, wie
Sie einen anderen Editor als vi verwenden können.
Nachdem Sie den Editor geschlossen haben, bringt CVS den Import zu Ende, wie in Beispiel 2-7 gezeigt.
Projekte importieren
| 19
Abbildung 2-4: Eingabe einer wichtigen Nachricht
Beispiel 2-7: Der Import wird abgeschlossen
N example/file2" 5L, 241C written
N example/file1
No conflicts created by this import
Im Repository wird das importierte Projekt als eine Sammlung von RCS-Dateien gespeichert. Beispiel 2-8 zeigt die Dateien des Projekts, das in Beispiel 2-7 importiert wurde.
Beispiel 2-8: Inhalt des Repositorys
$ ls -la /var/lib/cvsroot
total 16
drwxrwsr-x
4 root
anthill
drwxrwsr-x
10 root
staff
drwxrwsr-x
3 root
anthill
drwxrwsr-x
2 jenn
anthill
$ ls -la /var/lib/cvsroot/example
total 16
drwxrwsr-x
2 jenn
anthill
drwxrwsr-x
4 root
anthill
-r--r--r-1 jenn
anthill
-r--r--r-1 jenn
anthill
4096
4096
4096
4096
Jun
Jun
Jun
Jun
28
28
28
28
17:06
16:35
16:56
17:09
.
..
CVSROOT
example
4096
4096
387
387
Jun
Jun
Jun
Jun
28
28
28
28
17:09
17:06
17:06
17:06
.
..
file1,v
file2,v
Wenn Sie das Projekt angelegt haben, sollten Sie das CVS-Repository sichern und während der ganzen Lebensdauer des Projekts mit regelmäßigen Sicherungen fortfahren.
Wenn das Repository gesichert und das Projekt geprüft ist, können Sie die Originaldateien löschen. Während der Sicherung müssen Sie der alleinige Nutzer des Repositorys
sein.
20
| Kapitel 2: Schnelleinstieg in CVS
In Kapitel 6 wird das Sichern eines Repositorys erklärt.
Bevor Sie irgendetwas an dem Projekt tun, müssen Sie sich vergewissern, dass es in CVS
gespeichert ist, indem Sie eine Sandbox auschecken (siehe Abschnitt »Dateien auschecken«
weiter unten in diesem Kapitel). Benutzen Sie nicht Ihre Originaldateien als Sandbox; jegliche Arbeit muss von jetzt an in den Dateien vorgenommen werden, die aus dem Repository
in eine Sandbox ausgecheckt wurden. Die Originaldateien sollten Sie schleunigst löschen,
damit Sie nicht in Gefahr geraten, versehentlich diese statt der Sandbox zu modifizieren.
Zugriff auf Remote-Repositorys
Es gibt mehrere Möglichkeiten, auf ein Remote-Repository zuzugreifen. Für diese kurze
Einführung wird die ext-Methode mit dem SSH-Protokoll verwendet, aber wenn Ihr Systemadministrator Ihnen anders lautende Anweisungen gibt, tun Sie, was er sagt. In
Kapitel 8 wird die Verwendung von Remote-Repositorys genau beschrieben. Der Zugriff
mit ext und SSH verwendet die Methode ext für den Zugriff auf das Repository und den
SSH-Client als das Programm, das die Verbindung aufnimmt. Auch dieser Ansatz wird in
Kapitel 8 noch einmal aufgegriffen.
Ich empfehle Ihnen, als erste Amtshandlung SSH auf dem Client-Computer zu installieren. Achten Sie darauf, dass das clientseitige SSH-Protokoll zu dem serverseitigen passt.
Richten Sie nun die SSH-Schlüssel oder -Passwörter ein und testen Sie die Verbindung.
Mit SSH erstellen Sie eine sichere Verbindung zu dem Remote-Repository.
Wenn Sie an einem Unix- oder Linux-System arbeiten, setzen Sie als Nächstes die Umgebungsvariable CVS_RSH auf Ihrem Client-Computer auf den Namen Ihres SSH-Programms, normalerweise ssh oder ssh2. Grafische Clients, die den Zugriff mit ext und SSH
unterstützen, zeigen möglicherweise in dem Dialogfeld, in das der Repository-Pfad einzugeben ist, ssh als Authentifizierungstyp-Option an. Im Zweifel schauen Sie bitte in die
Dokumentation Ihres Clients.
In WinCVS und gCVS rufen Sie den Dialog PREFERENCES im Menü ADMIN
auf und wählen auf der Registerkarte GENERAL »ssh« als Authentifizierungsmethode. In MacCVSX (für OS X) steht ssh im MacCVSX-Menü zur
Verfügung. In MacCVS für OS 9 und frühere Versionen wird SSH nicht als
Standardoption unterstützt. Stattdessen können Sie SSH mit MacCVS
durch Tunneln eines Ports nutzen, wie in Anhang A beschrieben.
Liegt das Repository auf demselben Computer wie der Client, ist sein Pfad einfach der
vollständige Pfad zum Repository-Wurzelverzeichnis. Auf einem Remote-Computer hat
der Repository-Pfad die Form:
[:methode:][[[benutzer][:passwort]@]hostname[:[port]]]/pfad
Zugriff auf Remote-Repositorys | 21
Die Methode ist das Protokoll, das zur Verbindung mit dem Repository dient. Wenn Sie
SSH nutzen möchten, setzen Sie als Methode ext ein. Den Benutzernamen und das @
geben Sie an, wenn der Benutzername auf dem Server ein anderer ist als der auf dem Client. Wenn Sie keinen SSH-Schlüssel auf dem Host haben, verlangt das System ein Passwort, wenn Sie sich einloggen.
Die ext-Methode benötigt den Passwort- und Port-Teil des RepositoryPfads nicht.
Um einen CVS-Befehl auf dem Remote-Repository auszuführen, geben Sie am Betriebssystem-Prompt Folgendes ein:
cvs -d repository_pfad befehl
Beispiel 2-9 zeigt den Import eines Projekts in ein Remote-CVS-Repository.
Beispiel 2-9: Import in ein Remote-Repository
bash-2.05a$ cvs -d cvs:/home/cvs import example no-vendor release-0
N example/file1h" 5L, 241C written
No conflicts created by this import
bash-2.05a$
Dateien auschecken
CVS speichert Projekte und Dateien in einem zentralen Repository, aber gearbeitet wird
mit einer lokalen Arbeitskopie, der Sandbox, in Ihren lokalen Verzeichnissen. Diese
Sandbox erzeugen Sie mit dem Befehl cvs checkout.
CVS legt die Sandbox als Unterverzeichnis Ihres aktuellen Arbeitsverzeichnisses an. Ich
erstelle gern ein Verzeichnis, in dem alle meine CVS-Sandboxes untergebracht werden,
und verwende dazu ~/cvs. Egal in welchem Verzeichnis Sie Ihre Sandbox anlegen möchten, Sie tun es mit dem Befehl:
cvs -d repository_pfad checkout projektname
Dadurch werden alle Dateien für das bezeichnete Projekt ausgecheckt. Wenn Ihr Repository auf dem lokalen Computer liegt, geben Sie als Repository-Pfad den vollständigen Pfad
zum CVS-Repository an. Befindet es sich auf einem Remote-Server, halten Sie sich an die
Anleitung im Abschnitt »Zugriff auf Remote-Repositorys« weiter oben. Beispiel 2-10 zeigt
einen Checkout auf dem lokalen Computer.
Beispiel 2-10: Lokaler Checkout aus einem Repository
$ mkdir ~/cvs
$ cd ~/cvs
$ cvs -d /var/lib/cvsroot checkout example
cvs checkout: Updating example
U example/file1
U example/file2
22
| Kapitel 2: Schnelleinstieg in CVS
Durch den Befehl checkout wird eine Kopie der Dateien und Unterverzeichnisse des Projekts in einem für dieses Projekt benannten, im lokalen Arbeitsverzeichnis befindlichen
Verzeichnis gespeichert. Außerdem werden einige Administrationsdateien in einem
Unterverzeichnis namens CVS des Projektverzeichnisses abgelegt.
Sie können eine einzelne Datei oder ein Unterverzeichnis eines Projekts auschecken,
indem Sie projektname durch den Pfadnamen dieser Datei oder dieses Verzeichnisses
ersetzen, und zwar ab dem Wurzelverzeichnis. Weitere Informationen hierzu finden Sie
in Kapitel 3.
Da CVS den Repository-Pfad mit der Sandbox speichert, brauchen Sie in Zukunft -d
repository_pfad in Befehlen, die in dieser Sandbox ausgeführt werden, nicht mehr einzusetzen.
Wenn Sie eine Sandbox von einem Remote-Repository auschecken, sieht der RepositoryPfad ein wenig anders aus als im obigen Beispiel. Beispiel 2-11 zeigt einen Checkout aus
einem Remote-Repository.
Beispiel 2-11: Checkout aus einem Remote-Repository
$ cvs -d :ext:cvs:/home/cvs checkout cvsbook
cvs server: Updating cvsbook
U cvsbook/1-introduction.html
U cvsbook/2-installation.html
U cvsbook/3-quickstart.html
U cvsbook/acknowledgements
U cvsbook/outline_schedule
U cvsbook/proposal
U cvsbook/sources
U cvsbook/template
Commit
Sobald Sie Projektdateien in eine Sandbox ausgecheckt haben, können Sie diese Dateien
mit Ihrem bevorzugten Editor bearbeiten. Die Änderungen werden erst dann mit dem
Repository synchronisiert, wenn Sie den Befehl cvs commit ausführen. Diesen Befehl
geben Sie am besten im Wurzelverzeichnis Ihrer Sandbox, und er muss innerhalb der
Sandbox ausgeführt werden.
Sie sollten Ihre Änderungen häufig committen. Halten Sie sich an Faustregeln, etwa:
»Immer wenn der Code sauber kompiliert wird, committe ich« oder »Jeden Tag vor der
Mittagspause und vor Dienstschluss mache ich einen Commit«.
In Programmierprojekten mit mehreren Entwicklern sollten Sie keinen
Code committen, der sich nicht kompilieren lässt.
Commit
| 23
Wenn Sie committen, untersucht CVS jedes Verzeichnis und Unterverzeichnis unter dem
aktuellen Arbeitsverzeichnis dahingehend, ob sich irgendwelche von ihm verwalteten
Dateien geändert haben. Diese Änderungen pflegt es dann in das Repository ein. Beispiel
2-12 zeigt einen Commit. Da der Repository-Pfad in der Sandbox gespeichert ist, brauchen Sie ihn nicht explizit in Ihrem cvs commit-Befehl anzugeben.
Beispiel 2-12: Dateien an das Repository übergeben
$ cd ~/cvs/example
$ cvs commit
cvs commit: Examining .
Wenn Ihr Repository nicht auf dem lokalen Computer liegt und Ihr Repository-Server
Ihren öffentlichen SSH-Schlüssel nicht kennt, fragt CVS nach einem Passwort für den
Remote-Computer. Hat der Server den öffentlichen Schlüssel, kann Ihr SSH-Client den
privaten Schlüssel für Ihre Authentifizierung verwenden.
Falls irgendwelche Dateien geändert wurden, öffnet CVS einen Editor, in den Sie eine
Änderungsnachricht eingeben können. Der Standard-Editor ist vi, genau wie beim
Import eines Projekts. In Kapitel 3 finden Sie Anleitungen zum Wechsel des Editors.
Ich kann Ihnen nur empfehlen, aussagekräftige Änderungsnachrichten zu verfassen.
Wenn Sie später ein Rollback versuchen müssen und in den Nachrichten nur »habe ein
paar Bugs behoben« oder Ähnliches steht, dann wissen Sie nicht, zu welcher Revision Sie
zurückrollen müssen. In Beispiel 2-13 sehen Sie eine gute Änderungsnachricht.
Beispiel 2-13: Eingabe einer Commit-Nachricht
CVS:-----------------------------------------------------------------CVS: Enter Log. Lines beginning with 'CVS:' are removed automatically
Corrected bug #35. 'hello' was misspelled as 'helo'.
CVS:
CVS: Committing in .
CVS:
CVS: Modified Files:
CVS: file1
CVS:------------------------------------------------------------------
Nachdem Sie den Editor geschlossen haben, führt CVS den Commit-Befehl zu Ende und
zeigt Nachrichten wie die in Beispiel 2-14 an:
Beispiel 2-14: Ein Commit wird durchgeführt
Checking in file1;
/var/lib/cvsroot/example/file1,v <-- file1
new revision: 1.2; previous revision: 1.1
done
Wenn eine Revision im Repository jünger als die in der Sandbox ist, scheitert der Befehl
cvs commit. Dann müssen Sie die geänderten Dateien mit dem Befehl cvs update zusammenführen und hinterher cvs commit erneut ausführen. Beispiel 2-15 zeigt, wie man mit
einem gescheiterten Commit umgeht.
24
| Kapitel 2: Schnelleinstieg in CVS
Beispiel 2-15: Gescheiterter Commit
cvs server: Up-to-date check failed for 'file2'
cvs [server aborted]: correct above errors first!
cvs commit: saving log message in /tmp/cvst7onmJ
Sandboxes aktualisieren
Der Befehl cvs update vergleicht Ihre Sandbox mit dem Repository und lädt eventuell
geänderte Dateien in die Sandbox herunter. Er ergänzt den Befehl cvs commit, der Änderungen aus der Sandbox in das Repository lädt. Mit der Befehlsoption -d können Sie auch
neue Verzeichnisse herunterladen. Beispiel 2-16 zeigt die Verwendung von cvs update.
Beispiel 2-16: Die Sandbox wird aktualisiert
$ cvs update -d
cvs update: Updating .
U file2
cvs update: Updating directory
$ ls
CVS directory file1
file2
Wie beim Commit-Befehl brauchen Sie auch hier den Pfad zum Repository nicht anzugeben; er müsste in dem speziellen CVS-Unterverzeichnis in der Sandbox gespeichert sein.
Auch cvs update muss innerhalb der Sandbox ausgeführt werden, am besten in ihrem
Wurzelverzeichnis, damit gewährleistet ist, dass auch alle Unterverzeichnisse überprüft
werden.
Beachten Sie, dass -d, je nachdem, wo es im Befehl steht, verschiedene Bedeutungen
haben kann. Denken Sie daran, dass CVS-Befehle folgende Form haben:
cvs [cvs-optionen] befehl [befehlsoptionen]
Als CVS-Option definiert -d den Verzeichnispfad, aber als Befehlsoption des updateBefehls lädt -d Verzeichnisse und Dateien herunter. In Kapitel 3 lesen Sie darüber Genaueres.
Wenn der update-Befehl läuft, generiert er eine Liste der Dateien, die geändert wurden.
Direkt links neben jedem Dateinamen steht ein einzelner Großbuchstabe. Diese Buchstaben melden den Status der Dateien und haben folgende Bedeutungen:
U dateiname
Aktualisierung war erfolgreich. Eine neuere Version aus dem Repository hat die alte
in Ihrer Sandbox ersetzt.
A dateiname
Zur Hinzufügung vorgemerkt, aber noch nicht wirklich dem Repository hinzugefügt (dazu ist der Befehl cvs commit nötig).
Sandboxes aktualisieren
| 25
R dateiname
Zur Löschung vorgemerkt, aber noch nicht wirklich aus dem Repository gelöscht
(dazu ist der Befehl cvs commit nötig).
M dateiname
Die Datei wurde in Ihrem Arbeitsverzeichnis geändert. Die Datei in der Sandbox ist
aktueller als die Version im Repository, oder die Sandbox und das Repository verzeichnen beide Änderungen, die das System problemlos in Ihre Sandbox-Kopie einpflegen könnte (dazu ist der Befehl cvs commit nötig).
C dateiname
Zwischen der Dateiversion des Repositorys und Ihrer besteht ein Konflikt, der nur
durch Eingreifen eines menschlichen Bearbeiters gelöst werden kann.
? dateiname
Die Datei befindet sich in Ihrem Arbeitsverzeichnis, aber nicht im Repository. CVS
weiß nicht, was es mit ihr machen soll.
Die Buchstaben A, R und M bedeuten, dass Ihre Sandbox Änderungen verzeichnet, die
nicht im Repository sind. In solchen Fällen sollten Sie ein cvs commit durchführen.
Wenn CVS eine modifizierte Datei nicht problemlos mit ihrem Gegenstück im Repository zusammenführen kann, meldet es in der Ausgabe von cvs update diesen Konflikt,
wie in Beispiel 2-17 dargestellt.
Beispiel 2-17: Ein Dateikonflikt
cvs/example$ cvs update
cvs server: Updating .
RCS file: /var/lib/cvsroot/example/file1,v
retrieving revision 1.3
retrieving revision 1.4
Merging differences between 1.3 and 1.4 into file1
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in file1
C file1
CVS führt Dateien automatisch zusammen, wenn die Änderungen verschiedene Zeilen
betreffen. Wenn eine Zeile in der Repository-Dateikopie von der entsprechenden Zeile
in der Sandbox-Dateikopie abweicht, meldet CVS einen Konflikt und schreibt eine
Datei, in der die beiden Revisionen der Zeile von speziellen Zeichen umgeben sind, wie
Beispiel 2-18 zeigt.
Beispiel 2-18: Konfliktmarkierungen
<<<<<<<file2
This line came from the sandbox.
=======
This line came from the repository..
>>>>>>> 1.4
26
| Kapitel 2: Schnelleinstieg in CVS
Der Inhalt der Originaldatei wird in .#file.revision im Arbeitsverzeichnis der Datei
gespeichert und die Ergebnisse der Zusammenführung unter dem Original-Dateinamen.
Suchen Sie die Markierungen in der Datei mit dem Originalnamen, bearbeiten Sie sie und
schreiben Sie die dann geänderte Datei mit Commit in das Repository.
Dateien hinzufügen
Um einem Projekt im Repository eine Datei hinzuzufügen, legen Sie sie zuerst in Ihrer
Sandbox an. Achten Sie auf die Projektstruktur und legen Sie die Datei in das richtige
Verzeichnis. Dann geben Sie in dem Sandbox-Verzeichnis, das die Datei enthält, folgenden Befehl:
cvs add dateiname
Dieser Befehl markiert die neue Datei zur Aufnahme in das Repository. Verzeichnisse
werden mit demselben Befehl hinzugefügt. Dateien innerhalb eines Verzeichnisses können erst nach dem Verzeichnis selbst hinzugefügt werden. Eine Datei wird nur dann für
das Hinzufügen vorgemerkt, wenn Sie cvs add ausführen, aber erst mit dem nächsten cvs
commit tatsächlich in das Repository geschrieben. Dagegen wird ein Verzeichnis dem
Repository direkt hinzugefügt. Beispiel 2-19 zeigt, wie eine Datei angelegt und dann in
das Repository integriert wird. Merken Sie sich: Erst mit dem Befehl cvs commit wird die
Datei tatsächlich an das Repository übergeben.
Beispiel 2-19: Dateien hinzufügen
$ touch file3
$ cvs add file3
cvs add: scheduling file `file3' for addition
cvs add: use 'cvs commit' to add this file permanently
$ cvs commit
...
Log message editor opens
...
RCS file: /var/lib/cvsroot/example/file3,v
done
Checking in file3;
/var/lib/cvsroot/example/file3,v <-- file3
initial revision: 1.1
done
Wenn Sie Binärdateien oder andere Dateien haben, die kein einfacher Text
sind, lesen Sie bitte die Informationen über Binärdateien in Kapitel 3 nach,
bevor Sie sie in das Repository einbringen. Solche Dateien sollten mit der
Befehlsoption -kb übergeben werden.
Genau wie beim Commit wird sich auch hier ein Editor-Fenster zur Eingabe einer LogNachricht öffnen, die genau beschreibt, welche Dateien hinzugefügt werden.
Dateien hinzufügen
| 27
Dateien löschen
Um eine Datei aus dem Repository zu entfernen, löschen Sie sie zuerst aus dem SandboxVerzeichnis und führen dann den folgenden Befehl in dem Verzeichnis der Sandbox aus,
das zuvor die Datei enthielt:
cvs remove dateiname
Die tatsächliche Löschung findet erst mit dem nächsten cvs commit statt; bis dahin verbleibt die Datei im Repository.
Beispiel 2-20 zeigt das Löschen einer Datei. Nach Ausführung des Befehls cvs commit entfernt CVS die Datei jedoch nicht ganz, sondern legt sie in einem speziellen Unterverzeichnis namens Attic im Repository ab. Hier ist die History der Datei gespeichert, damit sie
später, falls nötig, wieder in das Repository eingebracht werden kann.
Da CVS genau wie bei einem Commit von Änderungen auch bei einer Löschung seinen
Editor öffnet, können Sie festhalten, aus welchem Grund Sie die Datei löschen.
Beispiel 2-20: Eine Datei löschen
$ rm file3
$ cvs remove file3
cvs remove: scheduling `file3' for removal
cvs remove: use 'cvs commit' to remove this file permanently
$ cvs commit
...
Log message editor opens
...
Removing file3;" 9L, 308C written
/var/lib/cvsroot/example/file3,v <-- file3
new revision: delete; previous revision: 1.1
done
CVS entfernt jedoch keine Verzeichnisse aus dem Repository, denn dies würde die Änderungsverfolgung torpedieren. Wenn Sie leere Verzeichnisse in Ihrer Sandbox vermeiden
möchten, müssen Sie mit den Befehlen cvs checkout und cvs update das Flag -P verwenden.
Tipps für den schnellen Erfolg
CVS ist ein Tool zur Verbesserung der Projektentwicklung und Systemwartung. Wie bei
allen Tools gibt es auch bei CVS Tricks, die die Effizienz erhöhen:
• Stellen Sie die Systemuhren der Computer, die ein Repository gemeinsam nutzen, auf
dieselbe Universalzeit ein. CVS ermittelt anhand der Zeitstempel, welche Dateien sich
geändert haben.
• Geben Sie jedem Entwickler seine eigene Sandbox und lassen Sie alle Dateiänderungen über CVS kommunizieren. Dann werden die Änderungen verfolgt, und kein
Entwickler kann die Arbeit eines anderen unwiederbringlich überschreiben.
28
| Kapitel 2: Schnelleinstieg in CVS
• Nehmen Sie häufige Aktualisierungen vor, mindestens einmal täglich bei Arbeitsbeginn. So halten Sie Ihre Sandbox auf einem aktuellen Stand.
• Führen Sie häufig Commits durch, damit Ihr Repository auf dem Laufenden bleibt.
Programmierer sollten dies immer dann tun, wenn ihr Code sauber kompiliert wird,
und andere generell nach jedem Arbeitsabschnitt.
• Programmierteams sollten Build-Management-Tools einsetzen und dafür sorgen,
dass alle Dateien des Builds im Repository festgeschrieben werden. Stellen Sie
sicher, dass die Builds für Tests oder Releases aus dem Repository und nicht aus
einer Sandbox stammen. Geben Sie jedoch Programmierern die Möglichkeit, PreAlpha-Tests mit Sandbox-Builds durchzuführen.
Tipps für den schnellen Erfolg
| 29
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement