Mittwoch, 19. September 2007

Vorbereitungen II - Versionskontrolle mit Subversion

Im Gegensatz zum letzten Teil, könnt ihr diesen Part als optional ansehen. Es ist nicht wirklich nötig für Symfony ein Software-Repository anzulegen, aber wenn ihr - wie ich - zu den Leuten gehört, die gerne mal simultan auf zwei verschiedenen Maschinen entwickeln (z.B. auf dem iMac zu Hause und auf dem MacBook von unterwegs), dann führt eigentlich kein Weg daran vorbei; genauso wenn Ihr in einem Team von mehreren Personen zusammen an einer Applikation schreibt.
Hierbei werden wir auf das OpenSource Projekt Subversion zurückgreifen, ein System zur Versionskontrolle, das von vielen als inoffizieller CVS-Nachfolger angesehen wird, das viele jener Schwächen behebt, mit denen das alte, in Entwicklerkreisen aber sehr beliebte CVS immer noch behaftet ist.

Repositories anlegen und der "Initial Import"

Da wir uns nicht lange mit (langweiligen) lokalen Software-Repositories aufhalten wollen, werden wir in diesem Artikel speziell den Gebrauch von Subversion über den Apache behandeln. Dies hat den Vorteil, dass wir quasi von überall auf unser Repository zurückgreifen können, sofern wir über eine Verbindung zum Internet verfügen.
Benutzer von OS X Leopard dürfen sich übrigens freuen - neben einer Apache2 Installation findet sich übrigens auch Subversion (Version 1.4.4) in den Developer-Tools wieder. Anders als bei Tiger müssen wir also keine zusätzliche Software installieren. Falls Ihr bisher noch nicht auf Leopard geupdatet habt, gibt es diverse Möglichkeiten, Subversion auf Eurem Mac einzurichten. Neben einigen OOTB-Lösungen, beschreibt ein äußert guter und lesenswerter Blog-Artikel auf www.yauh.de den Weg über MacPorts.

Was wir allerdings noch nachträglich machen müssen ist einerseits, die folgende Zeile in der httpd.conf zu suchen

LoadModule dav_module libexec/apache2/mod_dav.so

und darunter die Zeile

LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so

anzufügen. Damit die Änderungen aktiv werden, müssen wir (nach dem Speichern) natürlich noch den Apache neustarten.

Um nun endlich mit unserer Softwareverwaltung loslegen zu können, benötigen wir zunächst mal ein Repository. Dazu erstellen wir ein Verzeichnis repos, bevorzugterweise in einem Bereich, der nicht direkt vom Apache angesprochen werden kann (z.B. in /usr/local). Mittels des Befehls svnadmin verwandeln wir nun das Verzeichnis in ein waschechtes Software-Repository, das unter Versionskontrolle steht. Wollen wir in unserem Repository mehrere Projekte verwalten, macht es Sinn zusätzliche Unterverzeichnisse zu erzeugen. In unserem Beispiel werden wir unser erstes Projekt in prj verwalten.

sudo svnadmin create /usr/local/repos/prj

Anschließend werden wir das Repository mit Daten befüllen. In einem Verzeichnis unserer Wahl (z.B. ~/Documents) erstellen wir einen Ordner prj und mit den Unterodnern trunk, branches und tags:

> cd ~/Documents
> mkdir prj
> cd prj
> mkdir trunk branches tags


Diese Unterorder-Struktur ist übrigens nicht zwingend, allerdings ist sie gängige Subversion-Konvention. Mit dem "warum, weshalb und wofür" werden wir uns zu einem späteren Zeitpunkt auseinandersetzen. Für den Moment müsst Ihr mir einfach vertrauen, dass diese Struktur im Umgang mit Subversion definitiv Sinn macht ;)
Die zu verwaltenen Files kopiert ihr anschließend in den trunk-Ordner. Zu Testzwecken werden wir ein einfaches Script namens helloworld.php unter Versionskontrolle stellen

// helloworld.php

<?php

echo "Hello, World!";

?>


Der erste Import geschieht über den Befehl

sudo svn import -m "Initial Import" /Users/stylez/Documents/prj file:///usr/local/repos/prj

Adding /Users/stylez/Documents/prj/trunk
Adding /Users/stylez/Documents/prj/trunk/helloworld.php
Adding /Users/stylez/Documents/prj/branches
Adding /Users/stylez/Documents/prj/tags

Committed revision 1.


Der Parameter -m gibt dabei eine Nachricht (Message) an, die als Vermerk / Notiz im Repository gespeichert wird.

Da unser Apache ja nun Hand in Hand mit unserer Subversion-Versionsverwaltung arbeitet, können wir nun über einen beliebigen Webbrowser mal einen Blick auf unser Repository werfen. Vorher müssen wir allerdings nochmal an die httpd.conf ran, um (mindestens) folgende Direktive hinzuzufügen:

<Location>
DAV svn
SVNPath /usr/local/repos/prj
AuthType Basic
</Location>


Damit ist unser Repository dann unter http://127.0.0.1/svn erreichbar.
Die URI svn ist nicht unbedingt optimal gewählt, wenn man im Hinterkopf behält, dass man in /usr/local/repos mehr Projekte als nur prj verwalten will, aber für den Moment soll uns das nicht weiter stören.
Natürlich können wir unser Repository auch über ein Passwort schützen bzw. es nur für ausgewählt Benutzer zugängig machen. Um dieses Posting allerdings nicht noch weiter in die Länge zu ziehen, verweise ich an dieser Stelle ein zweites Mal auf den entsprechenden Eintrag auf www.yauh.de ;)

Tools und grafische Frontends

Neben der festen Integration in Apples Xcode-Tools, existieren noch diverse andere Frontends und Plugins, um die Arbeit mit Subversion zu erleichtern. Hervorzuheben sind dabei die freie Software svnX, mit der sich auch viele unterschiedliche Repositories gleichzeitig verwalten lassen und die mit einer ansprechenden grafischen Oberfläche aufwartet. Wer es lieber etwas pragmatischer mag, der sollte mal einen Blick auf das SCPlugin werfen. Mit Hilfe dieser kleinen, aber feinen Erweiterung für den Finder ist es möglich SVN-Aktionen über das Kontext-Menü auszuführen. Benutzer der Windows-Software Tortoise werden sich dabei sofort heimisch fühlen.