HowTo: Einstieg in Branching & Merging Strategien

image Wer ein Source Control Management benutzt wird früher oder später an dem Punkt eines Releases kommen. Spätestens ab diesem Zeitpunkt muss man sich Gedanken machen, wie man den Quellcode nun am besten verwaltet. Branching & Merging sind hier in dem Blogpost die Schlagwörter um die es gehen soll.

Grundbegriffserklärung: Branching?

Ein Branch (dt. Zweig) ist eine quasi eine Kopie des IST Zustandes des Source Codes. So kann man z.B. 2 unterschiedliche “Entwicklungszweige” haben um verschiedene Sachen zu entwickeln – völlig voneinander losgelöst.

Merging?

Merging ist genau die Umkehroperation des branchings. Wenn man aus einem Hauptzweig einen “Entwicklerzweig” abgespaltet hat, möchte man diesen auch irgendwann wieder in den Hauptzweig zurückführen. Diesen Vorgang nennt man mergen.

Toolunterstützung

Ich werde in diesem Blogpost nur die Theorie erklären, allerdings sind beide Vorgänge in mir jedem bekannten Source Control Management System irgendwie mit dabei. Das System kennt also die Verzweigungen. Dies ist wichtig damit das System beim Merging wieder unterstützt.

Ein guten Guide (besonders im Zusammenhang mit dem TFS) zum Thema Branching & Merging befindet sich auf Codeplex.

Branching Strategien: “Basic Branching”

image

Das ist die simpelste Herangehensweise. Der Main-Pfad repräsentiert unser Hauptentwicklungszweig. Hierbei muss sichergestellt werden, dass man möglichst immer den Main-Zweig “stabil” lässt, sodass man theoretisch jederzeit ein neues Release rausgeben kann. Entwicklungsarbeiten würden nur im Development-Zweig gemacht. Am Ende einer Entwicklungsphase würde der Entwicklungszweig wieder in den Mainzweig “gemerged” und von dort aus wieder ein neuer Branch für einen neuen Release gezogen.

Was erreichen wir dadurch?

Man kann jedes Release nachvollziehen und die Entwicklung beeinträchtigt nicht den Mainzweig – was bei einem Hotfix z.B. wichtig wäre.

“Standard Branch Plan”

image

Dieses Vorgehensmodell könnte schon bei weniger komplexen Projekten ausreichen. Ziel ist es immer den Main Zweig absolut stabil zu halten.

Im Alltag wird man ein Entwicklungsprojekt X haben, welches nun z.B. in Version 1 released wurde. Nun gehen die Arbeiten für Version 1.5 im Entwicklungszweig gut voran, allerdings wurde ein Bug auf dem Live System gefunden. Direkt in dem Main Zweig den Bug zu finden und zu lösen kann Nebenwirkungen haben. Daher hat man noch einen “Service Pack” bzw. “Hotfix” Zweig. In diesem Zweig kann der Fehler gefunden werden und auch getestet werden. Wenn alles OK ist, kann man aus dem “Service Pack” bzw. “Hotfix” Zweig wieder nach Main mergen (also die Bugfixes nun auch im Main Zweig einchecken) und ein neues Release ausgeben.

“Advanced Branch Plan”

image

Hier wird noch zusätzlich ein direkter Hot Fix Zweig eingeführt. Dies kann man vielleicht ganz gut mit den Windows Service Packs und Hotfixes vergleichen. Kleinere Sachen werden in einem Hotfix Zweig gefixt. Der Hotfix wird dann weiter nach oben in den Service Pack Branch gemerged. Nachdem man einige Hotfixes gemacht hat kann man ein Service Pack rausgeben. In diversen Abständen sollten die Änderungen die im Service Pack Zweig sind natürlich auch wieder nach Main fliessen, damit man in der nächsten großen Version die alten Fehler nicht wieder drin hat.

Der Development Zweig – “Branch per Feature”

Diese drei Beispiele sind nur für die Produktivumgebungen wichtig gewesen. Für die Entwicklung kann man natürlich auch mehrere Entwicklungszweige anfangen. So kann man z.B. mehrere Entwicklungsteams getrennt voneinander arbeiten lassen oder man macht ein Branch für jedes Feature:

image

Jedes Entwicklungsteam kann für sich an einem Feature arbeiten. Nach einem gewissen Stand kann das Team auch für den Test einen eigenen Branch anlegen.

Egal wie komplex man es gestaltet. Der “Main” Zweig trennt die Entwicklung und das Produktivsystem. Man kann Änderungen die auf dem Produktivsystem gemacht wurden über den Hotfix -> Service Pack -> Main Zweig bis zu den diversen Development Branches durchreichen “Forward Integration” bzw. “Reverse Integration” sind hier die Stichwörter.

Wie kann das z.B. im Source Control aussehen:

image

Was vorher in den Bildchen schematisch erklärt wurde, kann im Explorer z.B. so aussehen. Dies ist in dem Fall der TFS Team Explorer. In der Version 2010 hat sich auch einiges in dem Gebiet getan. Als kleines Beispiel kann der TFS die Hierarchie sehr nett darstellen:

image

Weitere Ressourcen:

Alle Bilder stammen aus dem Visual Studio TFS 2010 Branching Guide – allerdings trifft die pure Theorie genauso z.B. auf SVN zu.

Ich versuche die verschiedenen Sachen in den nächsten Blogposts direkt mal mit einem TFS Projekt zu zeigen. Das Thema ist sehr groß und nicht mit einem Blogpost zu erschlagen. Hier ging es mir nur um die aller gröbsten Basics.


Kick It auf dotnet-kicks.de
Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf dem Laufenden bleiben willst, abonniere unseren RSS Feed oder folge uns auf Twitter.

About the author

Written by Robert Mühsig

Robert Mühsig (@robert0muehsig) ist Webentwickler und beschäftigt sich mit Web-Frameworks (vor allem dem ASP.NET MVC Framework) und scheut sich auch nicht vor Javascript. Ansonsten bloggt er über all jene Probleme, die ihm über den Weg laufen. Seit 2008 ist er Microsoft MVP für ASP.NET und er arbeitet bei der T-Systems Multimedia Solutions GmbH in Dresden. Treffen kann man ihn online via Twitter (@robert0muehsig) oder dieser Seite oder bei der .NET User Group Dresden.

One Response

Comment on this post

Letzte Posts

  • image.png
    RavenHQ–RavenDB in der Cloud

    Ayende Rahien hat es heute verkündet – RavenHQ, der RavenDB Cloud Hoster (natürlich von und mit Ayende) ist ab heute raus aus der Beta und man kann es von überall aus nutzen. In der Betaphase waren nur Nutzer von AppHarbor zugelassen. Was ist RavenHQ? RavenHQ ist im Grunde ein gehostes RavenDB in den Rechenzentren von ...

  • image.png
    GitHub for Windows–erste Eindrücke

    Git ist schon eine tolle Sachen und eröffnet viele neue Möglichkeiten – allerdings ist der Einstieg recht hart und selbst wenn man die guten Hilfsanleitungen auf GitHub befolgt, kommt man am Anfang nur langsam vorwärt. Insbesondere ist das Tooling für Windows / .NET Entwickler auch nicht gerade “bekanntes Terrain”. GitHub to the rescue! Die GitHub ...

  • image.png
    Chocolatey–apt-get für Windows

    Durch Zufall bin ich auf das Tool “Chocolatey” gestoßen. Wer die Website sich anschaut, wird evtl. eine Verwandschaft mit NuGet ausmachen. Was macht Chocolatey? Chocolatey ist ein “Maschine Package Manager”, das bedeutet, dass man für seine Maschine einfach Tools runterladen und Updaten kann – direkt über die Konsole. Was ist der Unterschied zu NuGet? NuGet ...

  • image.png
    SASS, LESS & Coffeescript in Visual Studio mit der Web Workbench

    CSS und Javascript sind die “kleinste” Schnittmenge von allen Browsern für die Erstellung von Web-Applikationen. Leider geht dabei etwas komfort verloren, daher lieben alle Webentwickler jQuery! SASS und LESS sind zwei Varianten, wie man “schöner” CSS schreiben kann und Coffeescript versucht Javascript Entwicklung zu vereinfachen. Aber immer der Reihe nach… Was ist SASS? SASS steht ...

  • image.png
    Code-Inside Sample nun auf GitHub: Google Code zu GitHub Migration

    Seit einiger Zeit habe ich Beispielcode auf Google Code bereitgestellt. Einfach nur noch weg von Google Code O-Ton damals war: Ich hatte mich für Google Code entschieden, weil ich hoffe dass früher oder später die Google Code Suche nutzbar ist und es dadurch wenigstens ein kleiner Mehrwert entsteht. Allerdings wirft es momentan noch ein Fehler. ...

Auf Amazon einkaufen & unterstützen

Facebook