Versionsverwaltung

Die Versionsverwaltung des Quellcodes von DSAo-Md übernimmt ein Versionskontrollsystem. Aktuell nutzen wir Subversion (SVN) dafuer.

Warum wird SVN und nicht CVS genutzt?

Die Gründe hierfür liegen klar auf der Hand:

  • Es braucht keine komplizierten SSH-Schlüssel-Erstellungen wie es bei CVS Voraussetzung ist (mal von pserver abgesehen)
  • Die Handhabung des SVN ist um ein Erhebliches einfacher als das CVS

Die wesentlichen Unterschiede

Dieser Abschnitt stammt aus der Homepage von Thomas Dohmke und unterliegt dessen Lizenz.


Subversion vergibt Revisions-Nummern nicht für eine einzelne Datei, sondern immer für das gesamte Repository.
In dem Sinne sagt man bei Subversion nicht Revision 5 der Datei foo.c, sondern foo.c aus der Revision 5. Die Datei foo.c muss in zwei Revisionen M und N nicht notwendigerweise unterschiedlich sein.

Subversion behandelt Verzeichnisse gleichbedeutend mit Dateien, d.h. auch Verzeichnisse haben Revisionen. Man kann im Gegensatz zu CVS Verzeichnisse ebenso wie Dateien löschen, verschieben, umbenennen und sogar kopieren, ohne die History der Dateien zu verlieren.

CVS sendet lokale Dateien immer an den Server, um die Änderungen zu ermitteln. Subversion hält hingegen eine vollständige Kopie der Revision lokal und vergleicht die geänderten Dateien mit dieser Kopie. Es werden nur die Änderungen übermittelt. Damit wird teure Bandbreite gegen billigen Festplattenspeicher getauscht.

Subversion behandelt Tags und Branches, indem es das zu kennzeichnende Verzeichnis einfach kopiert. Der Unterschied zwischen einem Tag und einem Branch besteht lediglich darin, das die für einen Tag erstellte Kopie unveränderlich ist. Ein Tag wird zu einem Branch, wenn eine mit einem Tag versehende Datei verändert wird.

Subversion kann zu Verzeichnissen und Dateien sogenannte Meta-Daten verwalten. Die Meta-Daten bestehen aus Name/Wert-Paaren, die frei wählbar sind. Dabei können als Wert auch Links zu anderen Dateien im Repository gewählt werden, beispielsweise um eine Datei mit einer Lizenz-Datei zu verknüpfen.

Subversion kann binäre Dateien vergleichbar wie Textdateien verwalten und die Unterschiede zwischen zwei binären Dateirevisionen ermitteln.

Transaktionen in Subversion sind atomar, d.h. bei einem Commit mehrerer Dateien werden entweder alle Dateien oder keine Datei akzeptiert. Liegt bei einem Commit mit CVS von 10 Dateien bei der 5. Datei eine neuere Datei im Repository vor, so wird der Commit unterbrochen. Die ersten 4 Dateien liegen dann im Repository, während die restlichen 6 Dateien nicht übertragen wurden. Macht ein anderer Benutzer zu diesem Zeitpunkt einen Checkout, so erhält er eine inkonsistente und möglicherweise nicht lauffähige Revision. Subversion vermeidet dieses Verhalten, indem es beim Fehlschlagen eines Teils des Commits die Transaktion zurücksetzt und den Commit ablehnt.

Anwendung auf *nix-Systemen

Eine Arbeitskopie erstellen

Dazu wird in ein Verzeichnis deiner Wahl (hier im Beispiel das home) ein Unterverzeichnis angelegt.

Ein Beispiel wäre svn:

mkdir /home/username/svn/

Danach durch folgenden Befehl eine Arbeitskopie 'auschecken' (den gesamten Quelltext vollständig neu Herunterladen):

svn co https://dsao-md.svn.sourceforge.net/svnroot/dsao-md .

Unter /home/username/svn/dsao-md/ befindet sich nun eine lokale Kopie des Projektes.

Beim Commit einer Datei, wir werden später darauf eingehen, wird beim ersten Mal der Benutzername sowie das Passwort abgefragt. Das Subversion-Repository hat einen generellen Lesezugriff, jedoch einen beschränkten Schreibzugriff. Das heisst, wenn jemand in das Repository schreiben will, braucht er/sie Schreibrechte, jene er/sie wiederum vom Projektleiter bzw. beim Maintainer erhalten kann. Mit den dann erhaltenen Login-Daten meldet man sich sodann am Server an und kann, ohne weiteren Passworteingabe bei einem späteren Commit, seine Daten in das Repository hochladen.

Typische Befehle im Umgang mit Subversion

Hinzufügen einer Datei: Als erstes Legen wir eine Testdatei an:

cd /home/username/svn/dsao-md/test/
echo "Dies ist die README-Datei." > README

Hinzugefügt wird sie mittels:

svn add README

Es können weitere beliebige dateien hinzugefügt werden:

svn add DATEINAME

Oder auch gelöscht:

svn remove DATEINAME

Ist man irgendwann mit seiner Arbeit fertig, müssen die Änderungen noch an den Server übermittelt werden. Dies erledigt folgender Befehl:

svn commit

Es öffnet sich der eingestellte Editor, in dem man seine Änderungen ausreichend kommentiert. Den Standardeditor legt man wie folgt fest:

export SVN_EDITOR=nano

Alternativ kann man auch direkt den Kommentar zu dem Commit mit in der Befehlszeile angeben:

svn commit -m 'Kommentar zu der Datei' datei.php

Die aktuelle Version seiner lokalen Kopie erhält man mittels:

svn update

Wenn eine Datei nun umbenannt wird, dann geschieht das mittels:

svn move README readme.txt 
svn commit

Dabei wird im gegensatz zum CVS die History der Datei beibehalten, wie der Befehl

svn log readme.txt

zeigt.

Wenn man nun aus der 'readme.txt' mehrere Sprachen erzeugen will, dann geschieht das am einfachsten mit dem 'copy'-Befehl:

svn copy readme.txt readme.en.txt 
svn copy readme.txt readme.de.txt 
svn commit

Nun ist die Urdatei readme.txt in zwei neue kopiert worden; somit stehen nun drei 'readme'-Dateien zur Verfügung, die wohlgemerkt alle die gleiche History haben!

Alle bisher beschriebenen Kommandos lassen sich genauso auf Verzeichnisse und Binärdateien anwenden.

Weitere Hilfe gibt es bislang mit „svn help“

Anwendung auf Windows-Systemen

Client installieren

Installationsdateien für TortoiseSVN (der Windows-Client für SVN, auf den sich diese Anleitung bezieht) kann hier heruntergeladen werden, Sprachpakete gibt es auf der gleichen Seite (Ich verwende englische begriffe und stelle die deutschen Begriffe in eckigen Klammern dahinter). Nach der Installation und einem Neustart des Systems sollten im Kontextmenü einige weitere Punkte ersichtlich sein (rechten Maustaste).

Eine Arbeitskopie erstellen

Im Ordner, in dem das Repository liegen soll, wählt man im Kontextmenü 'SVN checkout' [SVN Auschecken] an. Im erscheinenden Fenster gibt man die URL des Projektarchivs an (https://dsao-md.svn.sourceforge.net/svnroot/dsao-md), der Zielordner ist bereits vorgegeben. Desweiteren muss beim ersten Auschecken die Revision 'HEAD' ausgewählt sein! Nach Bestätigung wird eine Kopie des Repository heruntergeladen.

Arbeitskopie aktualisieren

Im Kontextmenü 'SVN Update' [SVN Aktualisieren] auswählen, neuere Versionen werden dann automatisch heruntergeladen.

Konflikte

Konflikte entstehen wenn eine lokal bearbeitete Datei durch eine neuere auf dem Server ersetzt wird. In diesem Fall werden vom Server zwei Versionen heruntergeladen

  • Die aktuellste Version der Datei
  • Die Version der Datei vor der letzten Änderung

Lokal werden die Dateien mit der Version als Dateiendung versehen, die lokale, bearbeitete Datei mit der Endung '.mine' und in der eigentlichen Datei werden die Unterschiede der Dateien zusammenkopiert und vermerkt. In so einem Fall müssen die Dateien 'merged' (zusammengeführt) werden. Dies kann manuell (durch Auswählen der entsprechenden Passagen im TortoiseSVN-eigenen Editor) oder automatisch (nicht zu empfehlen) geschehen. Wurde der Konflikt behoben, so kann im Kontextmenü 'TortoiseSVN' und in dessen Untermenü 'Resolved' [Konflikt aufgelöst] gewählt werden, um die Konflikte zu löschen. (Solange ein Konflikt besteht, kann die Datei nicht übertragen werden; Konflikte vorbeugen!)

  Lokale Änderung an default.php, wird durch eine neuere Version ersetzt. Folgende Dateien sind hinzugekommen:
    - default.php.mine (Änderungen lokal)
    - default.php.r394 (Originalversion lokal)
    - default.php.r395 (neueste Version)
 
 
 
    Inhalt der default.php:
    weiterer Code...
    <<<<<<< .mine
    Inhalt der Änderungen Lokal
    =======
    Inhalt der Änderungen in der neueren Version
    >>>>>>> .r395
    ...weiterer Code

Dateien sperren

Um sichergehen zu können, dass während lokaler Änderungen an einer Datei keine weitere Person eine Änderung an derselben Datei hochlädt, kann diese gesperrt werden (dies ist die einzige Möglichkeit um Konflikte sicher zu vermeiden). Die zu sperrenden Dateien werden markiert, danach im Kontextmenü 'Get lock' [Sperre holen] auswählen. Die markierten Dateien werden nochmals aufgelistet und eine Notiz kann an den Server übermittelt werden.

Übertragen von Änderungen

Wenn eine Änderung vorgenommen wurde, kann diese übermittelt werden wenn im Kontextmenü 'SVN Commit' [SVN Übertragen] ausgewählt wird. Die im aktuellen Ordner befindlichen Dateien (inkl. Unterverzeichnisse), die verändert wurden, werden aufgelistet. Bei Bedarf können auch einzelne Dateien übertragen werden. Ebenfalls sollte man eine Änderungsmeldung angeben. Wenn eine Datei gesperrt oder neuer ist, wird die gesammte Übertragung abgebrochen. In einem solchen Fall gibt es nichts anderes als die aktuelle Datei herunterzuladen und gemäß Punkt 3.3.1 zu verfahren.

Sperren behalten

Beim Übertragen kann unten links im Meldefenster 'Keep locks' [Sperren behalten] ausgewählt werden, wenn gesperrte Dateien gesperrt bleiben sollen (normalerweise werden gesperrte Dateien bei einer Übertragung wieder freigegeben).

Dateien lokal ignorieren

Dateien, die im Repository liegen, aber nie übertragen werden sollen, können ignoriert werden. So stehen sie bei einer Übertragung nicht mehr weiter zur Auswahl. Herfür müssen die zu ignorierenden Dateien markiert werden, danach im Kontextmenü unter 'TortoiseSVN' in dessen Untermenü 'Add to ignorelist' [Ignorieren] auswählen. Wenn lediglich eine Datei ausgewählt wird, kann man zusätzlich auswählen, ob man lediglich diese Datei ignorieren will, oder alle Dateien mit dieser Dateiendung.

Umbenennen

Eine Datei, die registriert ist, muss über TortoiseSVN umbenannt werden, sonst wird lediglich eine neue Datei die noch nicht registriert wurde erstellt, und die Originaldatei ist auf dem Server immer noch vorhanden. Dafür die Datei markieren und im Mausmenü unter 'TortoiseSVN' in dessen Untermenü 'Rename' [Umbenennen] auswählen und den neuen Namen eingeben.

Löschen

Eine Datei, die registriert ist, muss über TortoiseSVN gelöscht werden, sonst wird lediglich die lokale Datei gelöscht und sie taucht bei der nächsten Aktualisierung wieder auf. Dafür die Datei markieren und im Mausmenü unter 'TortoiseSVN' in dessen Untermenü 'Delete' [Löschen] auswählen.

Symbole

Auf der Windowsoberfläche stehen besondere Markierungssymbole zur Verfügung, um den Status einer Datei zu kennzeichnen

  • Ein grüner Haken zeigt, dass die Datei unverändert ist
  • Ein rotes Ausrufezeichen zeigt, dass Änderungen vorgenommen wurden
  • Ein oranges Ausrufezeichen zeit, dass ein Konflikt besteht
  • Ein rotes Kreuz zeigt, dass die Datei beim nächsten Commit gelöscht wird
  • Ein blaues Plus zeigt, dass die Datei beim nächsten Commit hinzugefügt wird
  • Ein Schloss zeigt, dass die Datei gesperrt ist

Sprache umstellen

Im Kontextmenü 'TortoiseSVN' → 'Settings' [Optionen] und dann unter 'General' [Allgemein] die Sprache auswählen

Verzeichnisstruktur

/Release/

Bei einem neuen Release wird der devel-Ast in ein Archiv gepackt und dort der Versionsnummer entsprechend abgelegt.

/devel/

Das Entwicklungsverzeichnis, hier wird aktuell gearbeitet und aus diesem Verzeichnis werden auch neue Releases erzeugt.

/install/

Darin werden spaeter die Installationsdateien abgelegt (install.php)

/sql/

MySQL Spezifische Dateien. Patches, Updates und auch die install.sql ist dort zu finden

Die Verzeichnisstruktur ist an den Richtlinien vom Zend Framework, der MCV sowie der Libs wie Smarty ausgerichtet.

 
code/versionsverwaltung.txt · Zuletzt geändert: 15.05.2009 04:22 (Externe Bearbeitung)
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Driven by DokuWiki