Anschrift
Frauengasse 3-5
2500 Baden
02252 / 44403

SVN - Subversion 04-02-2011

SVN - Subversion

Mag. Stefan Hagmann
Stand: 03.2008

CVS dient dazu, beliebige Dateien zu verwalten. Mehrere Benutzer können an diesen Dateien arbeiten, ohne dass sich die verschiedenen Version in die Quere kommen. CVS hat aber nach wie vor einige Macken. Subversion SVN ist sein verbesserter Nachfolger.

Alle Dateien werden von einem SVN-Server verwaltet. Will jemand mit diesen Dateien arbeiten, so müssen diese zuerst in den eigenen Arbeitsbereich kopiert werden (auschecken). Wenn die Arbeit an den Dateien beendet ist, müssen diese wieder zurück an den Server übermittelt werden (einchecken).

SVN führt über alle Änderungen Buch und informiert den User gegebenenfalls darüber, wenn in der Zwischenzeit Änderungen an der bearbeiteten Datei durchgeführt wurden.

1.SVN Client - TortoiseSVN

Quelle: tortoisesvn.net (Stand 2008)

Als Client verwenden wir TortoiseSVN, das eine Weiterentwicklung von TortoiseCVS ist. TortoiseSVN ist ein Plug-in für den Windows-Explorer für SVN. Der Zustand einer Datei wird im Windows Explorer visuell dargestellt. Sprachpackete für andere Sprachen liegen ebenso vor.

Nach der Installation und dem Neustarten von Windows, ist alles was man so braucht im Kontextmenü integriert. Mit einem Rechtsklick auf einen Ordner, kann man ein neues Modul anlegen

svn000.jpg

Möchte man einen Ordner in das Projektarchiv importieren, klickt man mit einem rechten Mausklick auf den entsprechenden Ordner und wählt den Punkt Importieren aus.

svn002.jpg

Die URL muss hier genau stimmen, folgende Protokolle gibt es (Quelle: TortoiseSVN Handbuch)

file://

Direkter Zugriff auf einer lokalen Festplatte oder einem Netzwerkverzeichnis.

http://, https://

Zugriff via WebDAVProtokoll auf einenApache-Server, auf demSubversion installiertist. https mit SSL Verschlüsselung.

svn://

Nicht authentifizierter TCP/IP Zugriff mittels eigenem Protokoll auf einen svnserve Server.

svn+ssh

Authentifizierter, verschlüsselter TCP/IP Zugriff mittels SSH auf einen svnserve Server.

Ab nun stehen alle Befehle über einen rechten Mausklick zur Verfügung.

svn003.jpg

Hier einige Darstellungen im Explorer. Die Icons bekommen überlagerte Symbole, die den Status der Dateien angeben.

svn004.jpg

2.SVN Server

2.1.Linux Server

Im folgenden soll demonstriert werden, wie auf einem Linux System (hier Suse 10.1) ein SVN Server in Betrieb genommen wird. Wir setzen voraus, das ein solcher Server bereits installiert worden ist. Der Zugriff erfolgt dann über einen SSH Zugang (vergl. Kapitel 2. SSH Zugang).

Das Repository ist der Platz auf der Festplatte des Servers, wo die verschiedenen Versionsstände protokolliert und abgespeichert werden. Anstatt ständig neue Verzeichnisse mit merkwürdigen Versionsnummern anzulegen, reicht es bei einer Versionsverwaltung mit subversion wie auch mit CVS, regelmäßige Backups vom Repository anzulegen. Damit hat man auch für den Fall eines Hardwarefehlers vorgesorgt und sämtliche bisherigen Versionsstände gesichert. Zum Erstellen eines subversion Repository legt man erstmal an einer ausgewählten Stelle ein passendes Verzeichnis an.

  1. Es sollte einen entsprechenden User geben, z.B. development

  2. Wechseln in dessen Home Verzeichnis
    cd /home/development
  3. Ein Verzeichnis für die Daten anlegen
    mkdir svn
  4. Das Repository initialisieren, und alle nötigen Dateien zur Verwaltung erstellen
    svnadmin create /home/development/svn/
  5. Die nachfolgenden Schritte sind nicht unbedingt notwendig. Wir können eine eigene Gruppe am Server anlegen, und nur diese Gruppe hat Zugriff auf das Repository.
    addgroup subversion # Benutzergruppe anlegen
    chgrp -R subversion /path/svn/ # Gruppe subversion für alle Dateien setzen
    chmod -R o-rwx /path/svn/ # Alle anderen dürfen nix
    chmod -R g+rw /path/svn/ # Gruppenmitglieder dürfen auch schreiben
    chmod g+s /path/svn/db # Sicher stellen, dass Logfiles geschrieben werden können.
    adduser SVNUser subversion #Benutzer anlegen
  6. Nun noch die Datei <pfad>/svn/conf/svnserve.conf editieren.
    [general]  
    anon-access = none #keinen anonymen Zugriff erlauben
    auth-access = write #authentifizierte User dürfen Lesen und Schreiben
    realm = TestRepos #ein eindeutiger Name für das Repository
  7. Nun noch Kontrollieren ob der Server auch gestartet wird (Runlevels).

Das war es auch schon, ab nun nur noch den Client einstellen, und los geht’s.

3.SSH Zugang

3.1.Schlüssel erstellen

Um eine Verschlüsselte Verbindung verwenden zu können, brauchen wir Schlüsselpaare. Wir verwenden dazu Software von http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html(Putty). Wir laden das entsprechende ZIP File herunter, in dem alle Tools enthalten sind die wir benötigen. Alle Vorgänge beschreiben ab nun einen Linux Server!

Mit dem Tool Puttygen.exe erstellen wir ein Schlüsselpaar.

cvs007.jpg

Wir speichern nun den public key und den private key in separate Dateien ab. Den public key darf jedermann haben, den private key sollte man unter keinen Umständen weitergeben.

  1. Nun wechseln wir auf unseren Linux Server, in das home Verzeichnis unseres Benutzers. Dort gibt es ein Verzeichnis .ssh (Openssh sollte installiert sein). In diesem Verzeichnis, z.B. /home/development/.ssh/ legen wir eine Datei authorized_keys an. In diese Datei kopieren wir den public key (darf nur eine Zeile sein, kein Zeilenumbruch!).
  2. Leider dürften hier verschiedene Schlüsselformate verwendet werden. Deshalb kopieren wir die public key Datei auf den Server, und starten folgendes: ssh-keygen -i . Das konvertiert den Schlüssel in das richtige Format. Diesen schlüssel schreiben wir in die Datei authorized_keys.
  3. Nun wechseln wir noch die Zugriffsrechte auf chmod 400 authorized_keys (nur Leserechte für den Besitzer).

Damit darf sich jeder, der den private key besitzt ohne Passwort am Server anmelden. Denn der private key wird mit dem public key authentifiziert. Also nur wenn man den private key besitzt, ist so eine Anmeldung möglich.

Nun müssen wir nur mehr putty den Key mitteilen.

cvs008.jpg

Wenn die Datei angegeben ist, geben wir noch die Verbindungsdaten ein und speichern die Session ab.

Ab nun kann man sich ohne Passwort beim user development anmelden.

3.2.TortoiseSVN und SSH

Nun wollen wir auch unseren Client SSH beibringen. Die URL lautet

svn+ssh://user@server/pfad/svn

Nun wird man auf das Problem stoßen, dass bei jeder Operation das Passwort verlangt wird. Um dieses Manko zu umgehen, starten man ein putty Tool: pageant.exe. Dieses Tool speichert einen Key und übermittelt bei Bedarf den Schlüssel an den Server. Damit entfällt die lästige Passworteingabe.

Wenn man pagent beim Sytemstart starten möchte, muss man das Key File angeben

pagent.exe [path\keyfile]

Für ein Batch File bietet sich folgendes an:

START pageant.exe [path\keyfile]

Dieses Batch-File lässt man beim Systemstart ausführen, oder man Klickt es bei Bedarf an.

4.Kurze Einführung in TortoiseSVN

Da nun alle Vorarbeiten erledigt sind, noch schnell eine Einführung in das Arbeiten mit TortoiseSVN.

Wir haben ein Projekt das wir einchecken möchten. Mit einem rechten Mausklick startet man das Importieren. Der Verbindungsstring lautet

svn+ssh://user@server/pfad/svn/ProjektName

svn005.jpg

svn006.jpg


Nachdem das Projekt eingecheckt ist, kann man es jederzeit in einen leeren Ordner auschecken.

Wir legen einen leeren Ordner an und machen einen rechten Mausklick darauf.


svn007.jpg


Wieder den Verbindungsstring angeben und dann den Button mit den drei Punkten anklicken. Damit erhält man einen Überblick, was alles im Repository gespeichert ist.

OK Klicken und fertig.

svn008.jpg

In den Einstellungen von TortoiseSVN sollte man noch die Ignoriermuster eingeben, das sind Dateien die nicht übertragen werden sollen, z.B. *.tmp *.[Tt]mp *.exe

svn009.jpg

So, das war's. Viel Spass beim SVN System!