Strukturierung Versionierung mit Subversion

In diesem Artikel beschäftige ich mich mit dem Aufbau eines Subversionsystems und versuche die Begriffe Trunk, Branch und Tag zu erklären.

Was ist Subversion? – kurze Einführung

Subversion ist ein zentrales Versionierungssystem für die Softwareentwicklung und ist momentan das am weitesten verbreitetste. Mit Subversion kann man Source-Code jederzeit auf einen zentralen Server einchecken und somit können alle Entwickler auf den aktuellsten und bei Bedarf auch auf ältere Versionsstände zugreifen.
Inzwischen sind dezentrale Versionierungssysteme am aufstreben (z.B. git). Diesem Thema werde ich mich sicher später einmal widmen.

Naming Convention

In Subversion hat man keine Vorgabe, wie man seine Hauptverzeichnisse nennen soll. Es hat sich jedoch die Naming Convention entwickelt, dass die verschiedenen Entwicklungslinien in ein Verzeichnis namens trunk/tags/branches unterteilt werden. Mit dieser Convention ist es auch einfacher, fremde Entwicklungslinien besser zu verstehen.

Trunk

Der trunk ist der Hauptentwicklungszweig. Er ist ständig im “development-mode” und enthält jeweils den aktuellsten Stand der Entwicklung. Der trunk sollte nicht für einen Release markiert werden, sondern sollte immer nur als Entwicklungspfad genutzt werden.

https://svn.example.com/svnroot/project/trunk

Branches

Branches (Zweige) sind Abwandlungen vom trunk für bestimmte Zwecke. Ein Branch ist eine Kopie vom Trunk und kann für die speziellen Bedürfnisse des Branches angepasst werden. Es gibt ganz viele verschiedene Branchtypen. Erklärt werden hier die wichtigsten.

Release Branch

Ein Releasebranch wird dann angelegt, wenn ein neuer Release veröffentlicht werden soll. Im Brunch können die spezifischen Punkte, welche in einem Release erledigt werden müssen noch gemacht werden (z.B. Version eintragen, Change History, Bugfixes nach der Testphase). Der Brunch ist somit unabhängig vom Trunk.

https://svn.example.com/svnroot/project/branches/RB-1.0

Bug-fix Branch

Einfache Bugs sollten immer direkt im Trunk bzw. im Brunch behoben werden. Ein Bugfixbranch wird dann angelegt, wenn es ein komplizierter Bug mit vielen Abhängigkeiten ist, der evtl. auch über längere Zeit gefixt wird. Es soll so verhindert werden, dass die restliche Entwicklung so aufgehalten wird.

https://svn.example.com/svnroot/project/branches/BUG-3391

Experimental Branch

Ein Experimental Branch wird dann angelegt, wenn zum Zeitpunkt der Erzeugung noch nicht klar ist, ob dieses neue Feature überhaupt in das Produkt eingearbeitet wird. Somit kann verhindert werden, dass der trunk davon beeinflusst wird.

https://svn.example.com/svnroot/project/branches/TRY-new-technology

Tags

Tags sind genau wie Branches kopien vom Trunk. Technisch gesehen ist ein Tag und ein Branch dasselbe. Tags markieren eine ganz bestimmte Version vom SVN. Daher wird ein Tag normalerweise erstellt, wenn ein Release erstellt wird. Tags dürfen per Definition nicht mehr verändert werden (leider geht dies in SVN).

Merge

Merging ist das Zusammenführen von 2 Entwicklungszweigen (z.B. trunk und release branch usw.). Ned Batchelder hat einen guten Artikel über dieses Thema verfasst.


Quellen
How to structure your repository by Ariejan
Branching and merging by Ned Batchelder

4 Responses

  1. Ja definitiv. Darum ist es wichtig regelmässig vom Trunk in den Branch zu mergen und wenn der Branch fertiggestellt ist, sollte das Merging vom Branch zurück in den Trunk am wenigsten Probleme generieren.

Leave a Reply

Your email address will not be published. Required fields are marked *