Mastering SVN: Begriffe

Für den Neuling ist SVN zunächst mal eine unverständliche Wüste mit einer Menge neuer Buzzwords, die unter einen Hut gebracht werden wollen. In diesem Artikel werde ich auf diese eingehen und erklären.


Trunk

Der trunk ist heilig und enthält immer eine stabile Version!
Warum? Weil früher oder später der Kunde/Projektleiter ankommt und sehen will was der aktuelle Stand ist. Und auf weißen Seiten mit „Fatal Error“ läßt sich schlecht was zeigen. Außerdem muss u. U. ein Kollege mal einen Patch machen und dazu wird er den trunk nehmen.


Branch

Wo also arbeiten, wenn wir den trunk immer stabil halten wollen? Dazu gibt es den branch. Wann immer ein neues Feature erstellt werden soll, wird ein branch vom trunk abgezweigt. Dann kann in Ruhe an diesem Feature entwickelt werden, ohne dass wir von anderen noch unfertigen Änderungen beeinflusst werden. Commits erfolgen in regelmäßigen Abständen (mindestens einmal täglich) in den branch.
Wollen wir halbfertige Arbeit zeigen kann der Testserver leicht auf den Branch gebracht werden. Dazu später mehr.


Tag

Ein tag ist genau genommen auch nichts anderes als ein branch – nämlich eine Kopie vom trunk zu einem bestimmten Zeitpunkt. Die Konvention sagt lediglich, dass ein Tag nach seiner Erstellung nicht mehr verändert wird. Damit speichert ein tag einen bestimmten Zustand des trunk zu dem dadurch leicht zurück gekehrt werden kann. Nach einem Update der Produktivserver sollte ein tag angelegt werden. Dadurch kann jederzeit einfach auf genau den Code, der auch auf dem Server liegt, zugegriffen werden. Das wird für Hotfixes dringend benötigt.


Merge

Ein merge ist der Vorgang Änderungen aus einem anderen Zweig in den eigenen Zweig zu übernehmen. Dabei spielt es generell keine Rolle was wohin geholt wird. Nach einem Hotfix mit dem Code eines tags wird der Bugfix zum Beispiel in den trunk übernommen. Fertige und getestete Features werden aus ihrem jeweiligen branch in den trunk übernommen.


Patch

Im Sinne von SVN ist ein Patch der Unterschied zweier Zweige. Soll also zum Beispiel die Testumgebung auf den Code eines Branches gewechselt werden, kann dafür ein Patch verwendet werden. SVN ermittelt dabei automatisch die zwischen zwei Versionen unterschiedlichen Dateien und packt sie mit in den Patch. Dadurch bleibt die Zahl der Dateien überschaubar. Gibt es einen tag mit der aktuellen Serverversion können mit einem Patch zwischen diesem tag und dem trunk die notwendigen Änderungen vorgenommen werden. (Weniger Dateien zu kopieren, weniger Serverdowntime.)