Einführung in die Verwendung von CVS
Transcrição
Einführung in die Verwendung von CVS
Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier Einführung in die Verwendung von CVS Inhalt Einführung in die Verwendung von CVS ............................................................................................. 1 Inhalt................................................................................................................................................... 1 1. Was ist CVS? ................................................................................................................................. 1 2. Funktionsweise von CVS .............................................................................................................. 2 2.1 Checkout .................................................................................................................................. 2 2.2 Commit .................................................................................................................................... 2 2.3 Update...................................................................................................................................... 3 2.4 Add........................................................................................................................................... 3 2.5 Remove .................................................................................................................................... 3 3. Installation von CVS ..................................................................................................................... 3 3.1 Lokales CVS-Repository verwenden...................................................................................... 4 3.2 Externes CVS-Repository verwenden .................................................................................... 4 3.3 CVS-Verwendung mittels CVS-Server .................................................................................. 7 4. Verwendung von CVS in der Shell............................................................................................... 7 5. Arbeiten mit graphischen CVS-Client .......................................................................................... 9 6. Arbeiten mit CVS im SOPRA..................................................................................................... 11 6.1 Im Macintosh-Arbeitsraum ................................................................................................... 12 6.2 Zu Hause ................................................................................................................................ 12 Anhang ............................................................................................................................................. 12 Skript für die Installation von schlüsselauthentisierter ssh-Verbindung ................................... 12 Referenzen ....................................................................................................................................... 13 1. Was ist CVS? Das Concurrent Versioning System (CVS) ist ein frei verfügbares Versionierungssystem [cvs03], welches für die unterschiedlichsten Plattformen verfügbar ist und teilweise auch ein Konfigurationsmanagement ermöglicht - d.h. das Verwalten von Teilen von Software ist so möglich, dass diese zu beliebigen Releases [glinz02, Kapitel 11] zusammengesetzt werden können. CVS vereinfacht und erleichtert sehr die Arbeit, welche bei der Entwicklung von Software anfällt, indem es ß hilft die verwalteten Teile zu strukturieren. ß hilft Versionierung zu betreiben und automatisch Versionsnummern für jedes Dokument (Datei) führt. ß Mehrbenutzerbetrieb relativ komfortabel unterstützt. ß Hilft Releases auf einfache Weise zusammen zu stellen. IntroCVS.doc -1- Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier Eine Einführung ist zudem unter [blandy03] zu finden. Eine komplette Dokumentation findet sich unter [ceder03]. 2. Funktionsweise von CVS CVS verwendet ein sogenanntes zentrales Repository [ceder03] zur Ablage der einzelnen Versionen der Softwareteile (oder auch Dokumente oder Dateien genannt). Diese einzelne Dateien werden im Repository so verwaltet, dass verschiedene Benutzer zu jeder Zeit auf alle vergangenen und aktuellen Versionen der Software Zugriff haben. CVS wird vor allem für Textdateien, d.h. Source-Code-Dateien und Ähnliches verwendet. Es ist jedoch auch möglich binäre Dateien (d.h. Dateien, die nicht direkt mit einem Texteditor angezeigt werden können) mit CVS zu verwalten. 2.1 Checkout Um den aktuellen Release einer Software (d.h. alle neuesten Versionen der einzelnen Softwareteile) zu erhalten, lädt der Benutzer die aktuellen Versionen in eine lokale Arbeitskopie. Wird dies das erste Mal gemacht, so nennt man dies einen sogenannten Checkout. Dabei werden alle Dokumente in der aktuellen Versionen auf dem lokalen Computer in einem bestimmten Verzeichnis abgelegt. Alle Daten über die (lokal) herausgeladenen Dateien (Metadaten) werden in Unterverzeichnissen mit dem Namen CVS gespeichert. 2.2 Edit / Unedit Mittels Edit wird eine Datei für Änderungen vorbereitet. Dies geschieht, indem im Repository geschaut wird, ob die Datei gesperrt ist für die Änderung (lock). Falls dies nicht so ist, so wird der Schreibschutz von der Datei entfernt und der Benutzer kann entsprechend Änderungen in der Datei vornehmen. Dateien, welche nicht mittels dem Edit-Befehl editierbar gemacht werden sind schreibgeschützt. Falls Änderungen an einer editierten Datei rückgängig gemacht werden sollen, so kann mittels Unedit die letzte aktuelle Version aus dem Repository geholt werden. Diese Version überschreibt die lokalen Änderungen. 2.2 Commit Der Benutzer kann die einzelnen Softwaredokumente verändern und nach getaner Arbeit wieder im Repository ablegen. Dies geschieht durch ein sogenanntes Commit, wobei der Benutzer eine Beschreibung mit im Repository ablegt, welche Änderungen am Dokument vorgenommen wurden. Beim Ablegen wird automatisch durch CVS der Versionszähler erhöht und in die Konfiguration des aktuellen Releases, die neue Dokumentenversion hinzugefügt. Falls die Datei in der Zwischenzeit bereits durch einen anderen Benutzer im Repository verändert wurde, so versucht CVS bei Text-Dateien die geänderte Repository Version mit der lokalen Version automatisch zusammenzuführen. Falls dies nicht gelingt, so wird eine Meldung ausgegeben und der Benutzer hat den Konflikt manuell zu lösen. Der Konflikt wird innerhalb der betroffenen Textdatei durch Hervorhebung angezeigt. Bei Binärdateien wird keine automatische Zusammenführung gemacht. Hier hat der Benutzer direkt zu entscheiden, welche Datei (die lokal veränderte oder die veränderte Datei im Repository) gültig ist und welche nicht. IntroCVS.doc -2- Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier 2.3 Update Um die lokale Arbeitskopie des Repositories auf dem aktuellen Stand (d.h. auf dem aktuellen Release) zu halten, ist es nötig von Zeit zu Zeit ein sogenanntes Update zu machen. Dabei werden aus dem Repository alle Dokumente in der aktuellsten Version geholt und die lokalen Kopien ersetzt. Exisitiert eine lokale Kopie, die verändert wurde, so wird wie beim Commit versucht Zusammenzuführen. Ein Update sollte man immer vor dem Beginn einer neuen Modifikation an einem Dokument durchführen, damit sicher die aktuellste Version eines Dokumentes für die Änderungen verwendet wird. 2.4 Add Um neue Dateien im Repository hinzuzufügen, existiert der Befehl Add. Dieser Befehl fügt ein neues Dokument dem Repository hinzu. Dazu wird eine neue Datei angelegt, oder in die Verzeichnisstruktur der lokalen Kopie des Repositories kopiert und/oder verändert. Anschliessend kann die Datei mittels Add dem Repository hinzugefügt werden. Das eigentliche Hinzufügen der neuen Datei erfolgt erst, wenn das nächste Commit ausgeführt wird. 2.5 Remove Mit dem Befehl Remove können Dateien aus dem Repository entfernt werden. Die lokalen Kopien der Dateien, die aus dem Repository entfernt werden sollen, müssen zuerst gelöscht werden. Anschliessend kann der Befehl Remove angewendet werden. 3. Installation von CVS CVS kann auf unterschiedliche Art auf ein zentrales Repository zugreifen. Im Nachfolgenden werden hauptsächlich zwei mögliche Arten behandelt. Um auf ein CVS Repository zuzugreifen, müssen im Wesentlichen folgende Angaben gemacht werden: Angabe CVSROOT CVS_SERVER CVS_RSH IntroCVS.doc Beschreibung Diese Angabe beschreibt, wo das Repository liegt, d.h. ob es lokal erreichbar ist oder irgenwo auf einem externen Rechner liegt. Wenn das Repository irgenwo extern liegt, so ist anzugeben, auf welchem Server und mit welchem Benutzer auf dieses Repository zugegriffen werden kann. Ausserdem muss die Pfadangabe erfolgen, wo im Dateisystem des Servers das Repository zu finden ist. Diese Angabe bezeichnet mit welchem Tool auf das CVS – Repository zugegriffen wird. In der Regel ist dies das CVS-Programm, welches als binäre, ausführbare Datei auf dem Computer liegt, auf welchem auch das Repository liegt. Diese Angabe bezeichnet die verwendete Verbindungsart zum Repository, falls dieses nicht lokal liegt. Wir werden hier im Fall von externen Repositories im Nachfolgenden die Verbindungsart ssh verwenden. -3- Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier Um CVS zu betreiben, muss auf dem lokalen Computer ein CVS kompatibles Programm installiert sein. Wird extern auf das Repository zugegriffen, so muss auf dem entfernten Computer ebefalls ein CVS kompatibles Programm verfügbar sein. Normalerweise sollte mindestens das Kommandozeilen-Werkzeug CVS installiert sein. Dieses kann gefunden werden in [cvs03]. 3.1 Lokales CVS-Repository verwenden Ein Repository gilt als lokal, wenn es über eine lokale Laufwerksangabe erreichbar ist. Dies ist der Fall, wenn entweder das Laufwerk ein physisch lokales Laufwerk ist (z.B. die Festplatte des lokalen Computers) oder wenn dies ein Laufwerk ist, welches über das Netzwerk wie ein physisch lokales Laufwerk eingebunden wurde (die Netzwerkverbindung ist für den Benutzer transparent). Um ein lokales CVS-Repository anzusprechen müssen folgende Angaben gemacht werden: CVSROOT=:local:<localdir> Diese Angabe muss für die Verwendung von CVS in einer Shell als Umgebungsvariable gesetzt werden, bzw. bei der Verwendung eines graphischen Clienten angegeben werden. Hierbei muss <localdir> durch die Pfadangaben ersetzt werden, in welchem das Repository abgelegt ist. Falls das Repository über den Pfad /Volumes/gorgo.ifi.unizh.ch/cvs/sopra erreichbar ist, so muss CVSROOT gleich dem Wert :local:/Volumes/gorgo.ifi.unizh.ch/cvs/sopra sein. Die restlichen Angaben die oben stehen (CVS_RSH und CVS_SERVER) müssen für den lokalen Betrieb eines Repositories nicht angegeben werden. 3.2 Externes CVS-Repository verwenden Um ein externes CVS-Repository anzusprechen sind zwei Dinge nötig: 1. Die Angaben, die dem CVS-Programm sagen wie und wo auf das Repository zuzugreifen ist. 2. Eine schlüsselauthentisierte Verbindung mit Secure Shell zum Server. Dies ist nötig, damit keine Passwort-Abfragen mehr getätigt werden müssen. Ansonsten funktionieren viele Werkzeuge, welche CVS verwenden, nicht richtig. 3.2.1 Angaben für CVS Um auf ein externes CVS Repository zuzugreifen sind folgende Angaben nötig: CVSROOT=:ext:<username>@<servername>:<repository path> CVS_RSH=ssh CVS_SERVER=<Pfad zum CVS-Kommandozeilenprogramm> EDITOR=<editor name> CVSROOT muss die Angaben zum Benutzernamen (<username>) enthalten, mit welchem auf das Repository zugegriffen wird. Der Servername (<servername>) bezeichnet den Server, auf welchem das Repository liegt. <repository path> bezeichnet den Pfad zum Repository auf dem Server. Beipsielsweise, wenn auf ein Repository des Benutzers sopra177 zugegriffen wird, IntroCVS.doc -4- Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier welches auf dem Server gorgo.ifi.unizh.ch im Verzeichnis /export/home/sopra177 liegt, so ist CVSROOT wie folgt zu setzen: CVSROOT=:ext:[email protected]:/export/home/sopra177 CVS_RSH bezeichnet die Art wie zugegriffen wird, in diesem Fall über Secure Shell (ssh). CVS_SERVER bezeichnet das Verzeichnis und den Dateinamen (unter Unix zumeist /usr/bin/cvs), in welchem das CVS-Kommandozeileprogramm (herunterladbar unter [cvs03]) auf dem Server zu finden ist. Ist beispielsweise das CVS-Programm auf dem Server im Verzeichnis /usr/bin/ zu finden, so muss als Angabe folgendes gemacht werden: CVS_SERVER=/usr/bin/cvs EDITOR bezeichnet den Namen eines Editors, welcher aufgerufen wird, falls eine Nachricht Versionsbeschreibung (Nachricht geschrieben werden muss). Ist dies z.B. der Editor pico, so muss folgendes angegeben werden: EDITOR=pico Diese Angaben können auf unterschiedlichste Art und Weise CVS mitgeteilt werden. 1. Wird eine graphische Oberfläche benutzt, so können meistens diese Angaben konfiguriert werden. Dies ist der Falls bei WinCVS oder MacCVS (siehe [cvsgui03]). 2. Wird CVS in einer Shell verwendet, so sind die entsprechenden Angaben als Umgebungsvariablen zu setzen. Unter Unix-TC-Shell sehen die Angaben beispielsweise wie folgt aus: setenv CVSROOT „:ext:[email protected]:/export/home/sopra177“ setenv CVS_RSH „ssh“ setenv CVS_SERVER „/usr/bin/cvs“ setenv EDITOR „pico“ Diese Zeilen können in der .tcshrc Datei untergebracht werden, damit diese Variablen automatisch beim Aufruf der TC-Shell gesetzt werden. Für die Bash-Shell bzw. .bashrc sehen die Zeilen wie folgt aus: export CVSROOT=:ext:[email protected]:/export/home/sopra177 export CVS_RSH=ssh export CVS_SERVER=/usr/bin/cvs export EDITOR=pico 3. Die genannten Angaben können auch direkt dem CVS-Programm in der Shell über Kommandozeilenparameter übergeben werden. Dazu konsultieren Sie die Dokumentation von CVS ([ceder03]). IntroCVS.doc -5- Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier 3.2.2 Einrichten einer schlüsselauthentisierten ssh-Verbindung Um eine schlüsselauthentisierte ssh-Verbindung zu erstellen, muss wie folgt vorgegangen werden: 1. Installation eines OpenSSH Clients, sofern noch keiner installiert ist. Unter Unix ist ein solcher Client meistens bereits vorhanden. Windows-Benutzer können einen solchen beziehen unter [openssh03] 2. Es muss ein Public/Private-Schlüsselpaar auf dem Client erstellt werden. 3. Der Public-Schlüssel muss auf den Server kopiert werden. 4. Auf dem Client und dem Server müssen die entsprechenden Einstellungen gemacht werden Um die schlüsselauthentisierte ssh-Verbindung einzurichten, können Sie die Abschnitte 3.2.2.1 – 3.2.2.3 durcharbeiten, oder Sie können das Unix-Skript im Anhang für die Installation verwenden. Die dargestellten Arten sind für die Verwendung unter Unix gedacht. Unter Windows ist die Installation ähnlich. Bitte konsultieren Sie dazu die Installationsanleitung Ihrer OpenSSHDistribution. 3.2.2.1 Schlüsselpaar erzeugen Geben Sie in der Shell des Clients (d.h. Ihres lokalen Computers) folgende Befehle ein: mkdir ~/.ssh ssh-keygen -t rsa -f /.ssh/rsa.id -N "" Der Befehl mkdir erzeugt ein Verzeichnis .ssh im Home-Verzeichnis (falls noch nicht vorhanden). Mit ssh-keygen wird ein rsa-Schlüssel erzeugt und in der Datei rsa.id ohne Passphrase abgelegt (ohne Passphrase ist sehr wichtig). 3.2.2.2 Public-Key auf Server kopieren ß Loggen Sie sich mittels ssh <servername> -l <loginname> auf dem Server ein. Bsp. Für den Benutzer sopra177 auf gorgo.ifi.unizh.ch: ssh gorgo.ifi.unizh.ch –l sopra177. ß Erstellen Sie das Verzeichnis ~/.ssh durch die Eingabe des Befehls mkdir ~/.ssh. ß Beenden Sie die Sitzung durch Eingabe von exit. ß Wechseln Sie ins Verzeichnis ~/.ssh des lokalen Benutzers. ß Kopieren Sie den Schlüssel mittels scp scp /~.ssh/rsa.id.pub <username>@<servername>:/~.ssh ß Als Beispiel für den Benutzer sopra177 auf gorgo.ifi.unizh.ch sieht es wie folgt aus: scp /~.ssh/rsa.id.pub [email protected]:/~.ssh Um diese Operationen auszuführen, müssen Sie einige Male das Passwort des Servers eingeben. 3.2.2.3 Schlüssel auf dem Server eintragen IntroCVS.doc -6- Softwarepraktikum Sommersemester 2003 ß ß Prof. Dr. M. Glinz Silvio Meier Loggen Sie sich mittels ssh <servername> -l <loginname> auf dem Server ein. Bsp. Für den Benutzer sopra177 auf gorgo.ifi.unizh.ch: ssh gorgo.ifi.unizh.ch –l sopra177. Geben Sie folgendes ein: echo '# cvs key' | cat - ~/.ssh/rsa.id.pub >> ~/.ssh/authorized_keys ß Diese Zeile fügt den Schlüssel der Datei authorized_keys im .ssh Verzeichnis hinzu und authentisiert damit automatisch alle Clients, die sich mit diesem Schlüssel anmelden. Somit brauchen diese Clients kein Passwort mehr für den Login. Loggen Sie sich aus, indem Sie exit eingeben. 3.2.2.4 Server in Verbindung mit dem Schlüssel auf dem Client eintragen In der Datei ~/.ssh/config auf dem Client müssen folgende zwei Zeilen eingetragen werden: Host <servername> IdentityFile ~/.ssh/rsa.id Mit diesen zwei Zeilen wird dem Client mitgeteilt, dass er sich mittels dem Schlüssel in der Datei rsa.id beim angegebenen Server zu authentifizieren versuchen soll. Konkret sehen diese zwei Zeilen für unser Beispiel von oben wie folgt aus: Host gorgo.ifi.unizh.ch IdentityFile ~/.ssh/rsa.id Diese Einträge können manuell mit einem Texteditor (z.B. pico oder emacs) gemacht werden. Mit dieser Aktion ist die Konfiguration der schlüsselauthentisierten ssh-Verbindung beendet. Nun sollte ein Einloggen mittels ssh <servername> -l <username> beim Server ohne Passwort möglich sein. 3.3 CVS-Verwendung mittels CVS-Server Auf diese Art der Verwendung von CVS wird hier nicht näher eingegangen. Für nähere Informationen konsultieren Sie [ceder03] . 4. Verwendung von CVS in der Shell Die folgenden Befehle können in der Shell verwendet werden, um auf ein CVS-Repository zuzugreifen. Dabei wird vorausgesetzt, dass die, unter 3. bzw. 3.2.1 genannten Angaben als Umgebungsvariablen in der Shell gesetzt sind. Die nachfolgenden Aufrufe sollen beispielhaft die wichtigsten cvs-Kommandos bei der Verwendung in einer Shell zeigen. Befehl cvs add –m „Test Java program“ Test.java IntroCVS.doc Was passiert? Fügt eine Datei Test.java dem Repository hinzu. Die Dateibeschreibung heisst “Test Java program”. Die Datei ist noch nicht sofort im Repository verfügbar, sondern wird erst im zentralen Repository abgelegt, wenn das nächste Mal Commit ausgeführt wird. -7- Softwarepraktikum Sommersemester 2003 cvs commit –m “changes in directory committed” cvs edit Test.java cvs unedit Test.java cvs commit –m “bug 132 fixed” Test.java cvs remove Test.java cvs add NewDirectory cvs remove AnotherDirectory cvs add –kb test.gif cvs update –d –P cvs up NewDirectory cvs checkout mylittleproject cvs update cvs commit IntroCVS.doc Prof. Dr. M. Glinz Silvio Meier nächste Mal Commit ausgeführt wird. Führt alle Änderungen aus, d.h. Dateien, die verändert bzw. mit add hinzugefügt wurden, werden als neue Version im Repository abgelegt. Dabei wird die Meldung “changes in directory committed” geschrieben. Dieser Befehl hat rekursive Wirkung, d.h. sowohl alle veränderten bzw. hinzugefügten Dateien im aktuellen Verzeichnis, wie auch in allen Unterverzeichnissen werden ins Repository geschrieben. Setzt die Datei Test.java editierbar, d.h. der lokale Schreibschutz wird aufgehoben. Die Datei kann nun verändert werden. Alle lokalen Modifikationen der Datei Test.java werden rückgängig gemacht, d.h. die Datei wird ersetzt durch die aktuelle Version im Repository. Dieser Befehl macht ein Commit für eine bestimmte Datei Test.java mit der entsprechenden Meldung. Dieser Befehl entfernt eine Datei aus dem Repository. Zuvor muss aber die Datei in der lokalen Repositorykopie gelöscht werden. Dieser Befehl fügt ein Verzeichnis mit dem Namen NewDirectory hinzu. Zuvor muss das Verzeichnis in der lokalen Kopie angelegt worden sein. Beim nächsten Commit wird das Verzeichnis im zentralen Repository erzeugt. Entfernt das Verzeichnis AnotherDirectory und alle Unterverzeichnisse und Unterdateien. Fügt die Datei test.gif als Binärdatei hinzu (d.h. keine Zeichentransformation für Linefeed und Umlaute wird vorgenommen). Macht ein Update, d.h. lädt alle geänderten Dateien aus dem Repository herunter, legt dabei neue Verzeichnisse an (-d) und löscht in der lokalen Kopie des Repositories veraltete (d.h. leere) Verzeichnisse (-P). Sind Dateien lokal modifiziert worden, so wird versucht eine Zusammenführung zu machen. Macht ein Update für das Unterverzeichnis NewDirectory und alle darin enthaltenen Unterverzeichnisse. Holt eine neue lokale Kopie des CVS Repository-Moduls mylittleproject und legt dieses im aktuellen lokalen Verzeichnis ab. Macht ein (rekursives Update) über die lokale Kopie des Repositories (ohne Update der Verzeichnisstruktur) Macht ein Commit (rekursiv) für alle Dateien, die lokal im aktuellen Verzeichnis oder in einem Unterverzeichnis modifiziert wurden. Weil keine Meldung angebeben wurde, wird entweder ein Editor gestartet, in dem eine -entsprechende 8Meldung eingegeben werden kann (falls die Umgebungsvariable EDITOR gesetzt ist), bzw. es wird in der Shell eine Eingabeaufforderung für die Meldung angezeigt. Softwarepraktikum Sommersemester 2003 cvs import -m "Imported sources" proj mylittleproject start cvs edit anotherBin.gif …. Ersetzen der Datei anotherBin.gif cvs admin –kb anotherBin.gif cvs commit –m « file set to binary » anotherBin.gif Prof. Dr. M. Glinz Silvio Meier wurde, wird entweder ein Editor gestartet, in dem eine entsprechende Meldung eingegeben werden kann (falls die Umgebungsvariable EDITOR gesetzt ist), bzw. es wird in der Shell eine Eingabeaufforderung für die Meldung angezeigt. Importiert alle Dateien und Verzeichnisse, sowie Unterverzeichnisse und darin enthaltene Dateien in ein neu angelegtes Modul im Repository. Dabei wird für alle Dateien die Meldung „Imported Sources“ verwendet. Im zentralen Repository liegt das Modul dann im Unterverzeichnis proj. Angesprochen werden für einen Checkout, kann das Modul über den Namen mylittleproject. Start ist das initiale Versions-Tag, welches für die Dateien verwendet wird. Diese Folge von Befehlen wird dazu verwendet, um eine Datei, welche versehentlich als Textdatei eingecheckt wurde, aber eigentlich eine Binärdatei ist, in eine Binärdatei umzuwandeln. Dabei wird die aktuelle Datei zuerst editierbar gemacht. Dann wird die richtige Binärdatei nochmals über die bestehende lokale Kopie geschrieben (kopiert), da die vom Repository geladene Datei wahrscheinlich beschädigt ist. Anschliessend wird mit dem Admin-Befehl die Option -kb auf die Datei gesetzt, d.h. die Datei wird binär gemacht. Ein Commit schreibt die Änderungen ins Repository. 5. Arbeiten mit graphischen CVS-Client Ein graphischer CVS-Client kann das Verwenden von CVS wesentlich vereinfachen. Ein graphischer, frei verfügbarer CVS-Client kann unter [cvsgui03] gefunden werden. Im Nachfolgenden wird beschrieben, wie die Einstellungen für den graphischen CVS-Client gemacht werden müssen. Die nachfolgenden Bildschirmauszüge sind mit MacCVS gemacht. WinCVS funktioniert äquivalent. Die unter 3 genannten Angaben müssen unter der Funktion Einstellungen gesetzt werden. Dazu kann im Menu maccvsX der Punkt Preferences ausgewählt werden. Es erscheint folgendes Bild mit Einstellungen: IntroCVS.doc -9- Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier Im Beispiel hier wird lokal auf ein Repository auf dem Volume gorgo.ifi.unizh.ch zugegriffen. Das Menü Create stellt diverse Befehle zur Verfügung: Die wichtigsten sind Import module und Checkout module. Import module lässt es zu, ein neues Modul im ausgewählten Repository zu erzeugen und lokal gespeicherte Dateien ins Repository zu importieren. Checkout module lädt ein Modul aus dem Repository heraus. Bei beiden ist über ein Dateidialog zuerst ein Vezeichnis auszuwählen, in das der Checkout erfolgt, repektive von dem Dateien importiert werden. Um eine lokale Kopie des Repository durchsuchen zu können kann im Menü File ein Browserfenster auf das entsprechende Verzeichnis geöffnet werden: IntroCVS.doc - 10 - Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier Mittels diesem Browserfenster können die Verzeichnisse der loalen Arbeitskopie durchsucht werden. Im Browserfenster, sind die Angaben daüber zu sehen, ob die Datei binär ist, welche Version sie hat und ob sie lokal modifiziert wurde. Wird eine Datei ausgewählt so können Operationen im Menü Modify ausgewählt werden: Die Menüpunkte entsprechen den Operationen, die unter 2 eingeführt wurden.. Die Edit Operation ist in der Schnellwahlliste unter dem Symbol zu finden. Ob die entsprechende Operation auf eine Datei anwendbar ist, hängt vom Zustand der Datei ab. Z.B. können lokale Dateien (diese sind durch ein Fragezeichen gekennzeichnet) nur mittels add dem Repository hinzugefügt werden. 6. Arbeiten mit CVS im SOPRA IntroCVS.doc - 11 - Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier 6.1 Im Macintosh-Arbeitsraum Im Macintosh-Arbeitsraum an der Uni werden Sie CVS mit lokalen Repository betreiben (siehe 3. und 3.1). Dies geschieht, indem Sie Ihr Repository in einem Unterverzeichnis Ihres Datenlaufwerkes ablegen. Die lokalen Kopien liegen wiederum auf dem Datenlaufwerk in separaten Unterverzeichnissen, d.h. für jede Person, welche in Ihrer Gruppe mit dem Repository arbeitet hat es ein eigenes Unterverzeichnis, in welches die lokalen Kopien ausgelagert werden. 6.2 Zu Hause Falls Sie zu Hause mit dem Repository arbeiten möchten, so müssen Sie gemäss 3.2 verfahren. Vorsicht: Beim Betrieb von CVS von zu Hause aus müssen Sie eine OpenSSH kompatible Software installieren. Nicht jede SSH-Software ist zu dieseem Zweck gleich gut geeignet. Falls sie einen Windows-SSH Client installieren wollen, empfehlen wir [openssh03]. [putty03] ist für diesen Zweck weniger zu empfehlen. Anhang Skript für die Installation von schlüsselauthentisierter ssh-Verbindung Das folgende Skript kann dazu verwendet werden, um eine schlüsselauthentisierte sshVerbindung zu installieren. Dazu müssen die nachfolgenden Zeilen in eine Textdateikopiert werden. Diese Datei muss Ausführungsrechte erhalten. Anschliessend führen Sie diese Datei auf dem Client in einer Shell aus. Folgen Sie den Instruktionen. #!/bin/bash # -------------------------# use this script as follows, this script can be used on unix compatible operating systems with # bash # 1. copy past in text file # 2. put the according execution rights on it # 3. execute it on the client, with which you want to do a login without password authentication # only by using key authentication. (Note open ssh or a comparable ssh client must be installed) # 4. follow the instructions # read user information echo Please enter server name, where to connect without password read SERVER echo Please enter username name login for the server read GROUP echo echo read echo Please enter user home directory on server, i.e. where the directories are located normally /home SERVER_HOME Entered Server Login: $GROUP # test if ssh directory exists. if test ! -e $HOME/.ssh then echo "*** creating .ssh dir on local account" mkdir $HOME/.ssh fi echo "*******************************************************************" echo "** now you have to enter several times your password on the server" echo "** for several remote operations" echo "*******************************************************************" echo "" echo "*** creating .ssh dir on remote server $SERVER:$SERVER_HOME/.ssh" ssh $SERVER -l $GROUP "mkdir $SERVER_HOME/$GROUP/.ssh" #if key already exists, use existing key if test ! -e $HOME/.ssh/rsa.id then echo "*** generating public/private key pair" ssh-keygen -t rsa -f $HOME/.ssh/rsa.id -N "" fi IntroCVS.doc - 12 - Softwarepraktikum Sommersemester 2003 Prof. Dr. M. Glinz Silvio Meier echo "*** copying public key to server" scp -r $HOME/.ssh/rsa.id.pub $GROUP@$SERVER:$SERVER_HOME/$GROUP/.ssh echo "*** registering key @ server " ssh $SERVER -l $GROUP "echo '# cvs key' | cat - ~/.ssh/rsa.id.pub >> ~/.ssh/authorized_keys" echo "*** writing client configuration" echo "Host $SERVER" >> $HOME/.ssh/config echo " Identityfile $HOME/.ssh/rsa.id" >> $HOME/.ssh/config echo echo echo echo echo "****************************************************" "** Now login without passwort should happen, proofing" "** that it works, otherwise something's wrong." "****************************************************" "" echo "Test now when logging into $SERVER, no password required any more!" ssh -l $GROUP $SERVER Referenzen [blandy03] [cvs03] [ceder03] [cvsgui03] [glinz02] [openssh03] [putty03] IntroCVS.doc Blandy, J.: Introduction to CVS, http://www.cvshome.org/docs/blandy.html, 2003 Diverse: Homepage von CVS, http://www.cvshome.org/, 2003 Cederqvist, P.: Version Management with CVS, http://www.cvshome.org/docs/manual/, 2003 Diverse: The CVS GUI, http://sourceforge.net/projects/cvsgui, 2003 Glinz M.: Vorlesungsskript WS 02/03 , Software Engineering I. Institut für Informatik der Universität Zürich Johnson, M.: Open SSH Web-Site for Windows: http://lexa.mckenna.edu/sshwindows/, 2003 Tatham, S. et al.: Putty Homepage, http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html, 2003 - 13 -