Versionsverwaltungen oder auch VCS (Version Control System) genannt, bieten Entwicklern große Vorteile.
Moderne Systeme wie Git oder das etwas ältere Subversion mit seinem Vorgänger CVS bieten allerdings derart umfangreiche Funktionalitäten, dass einige Funktionsweisen missbräuchlich genutzt werden. Letztendlich gilt zwar: Richtig ist, was zum Ziel führt. Dennoch möchte ich mich heute aus diesem Grund mit einem kleinen Missverständnis und einer standardisierten Vorgehensweise beschäftigen.
Explizit geht es um ein Konzept der VCS: Branches!
Häufig werden Branches als verschiedene Entwicklungszweige genutzt, die einen gemeinsamen Teil haben aber deren spezielle "Auswüchse" nicht wieder zusammengefügt werden können.
Ein negativ-Beispiel: Es wird eine speziell auf einen Kunden zugeschnittene Softwarelösung erstellt. Einige Monate später fragt ein anderer Kunde nach einer ähnlichen Lösung. Man entscheidet sich, die bestehende Software zu nutzen, muss diese aber entsprechend anpassen.
Was hier entsteht ist keine Version sondern eine Variante. Nicht selten wird hier das Branches-Konzept genutzt, um einen weiteren Zweig zu öffnen!
Dies ist nicht im Sinne des Erfinders, auch wenn es funktionieren kann. Letztendlich handelt man sich aber auf diese Weise später häufig grobe Probleme ein und verliert den Überblick über die vielen Branches.
Besser: Nur einen Hauptzweig verwenden und Plugins / Hooks / Module einsetzen, um auch für weitere Kunden gewappnet zu sein. Der Kern der Software wird so immer gemeinsam weiterentwickelt, die Flexibilität steigt. Oder habt ihr hier sogar einen noch besseren Tipp?
Ein positiv-Beispiel: An einer bestehenden Softwarelösung, die bereits in einem VCS gepflegt wird, sollen größere Änderungen vorgenommen werden. Es ist unklar, wie lange die Arbeiten dauern.
Es wird ein branch angelegt, um den Haupt-Entwicklungszweig weiterhin pflegen zu können sowie Bugfixes einbringen zu können. Die größeren Anpassungen und Tests laufen im neuen Branch und es kommt kein Zeitdruck auf.
Nach Fertigstellung des Entwicklungszweiges kann dieser wieder schnell und einfach per VCS Befehl (je nach VCS) migriert werden. Eine perfekte Unterstützung des Entwicklungs- und Projektablaufs!
Fazit:
- Version != Variante
- Variante != Branch
- Branches diesen als temporärer Split EINER Entwicklung, um den Hauptzweig auch während größerer Anpassungen stabil und pflegbar zu erhalten. Beispielsweise auch wenn testweise größere Anpassungen zur Evaluation durchgeführt werden.