In einem kontinuierlich weiterentwickelten Webprojekt (kein Produkt) verfolgen wir derzeit die folgende Verzweigungsstrategie, die grob auf Git Flow basiert :
- branch entwickeln: neueste arbeitsversion
- master branch: freizugebende version / freigegebene version
- Feature-Zweige: Features in Entwicklung
- Hotfix-Zweige: dringende Bugfixes in der veröffentlichten Version
Der Master ist schreibgeschützt und wird über Pull-Anforderungen aus Entwicklungs- oder Hotfix-Zweigen aktualisiert . Jedes Update führt dazu, dass ein Release Candidate erstellt und auf dem Staging-System bereitgestellt wird. Release-Kandidaten werden nach manueller Genehmigung für die Produktion bereitgestellt.
Feature-Zweige werden basierend auf der Entwicklung oder aus dem letzten Commit erstellt, das mit dem Master zusammengeführt wurde. Eine Pull-Anforderung aus einem zu entwickelnden Feature-Zweig wird erstellt und in einem kostenlosen Testsystem bereitgestellt, in dem Integrationstests und Abnahmetests (automatisch und manuell) ausgeführt werden. Nach erfolgreichem Test und Überprüfung wird der PR zusammengeführt, sodass er Teil des nächsten Releases wird (dh von der Entwicklung zum Master zusammengeführt wird).
Mein Ziel
Ich möchte dies vereinfachen und den Entwicklungszweig loswerden. Der Entwicklungszweig hat hauptsächlich historische Gründe und da es sich immer um eine erfolgreich getestete Version handelt, ist es meines Erachtens unnötig, ihn vom Master zu trennen. Durch das Entfernen wird auch der Freigabeprozess vereinfacht, da keine weitere Zusammenführung mehr erfolgt.
Ich habe folgende Einschränkungen:
- Veröffentlichungen sind geplant und sollten nicht vollständig automatisiert werden
- Während Feature-Zweige in der Regel nur von kurzer Dauer sind, bleiben einige für einige Wochen nicht verbunden (z. B. ein Redesign), müssen jedoch ebenfalls getestet werden (derzeit als Open-Pull-Anforderungen für die Entwicklung).
- Manchmal sollte ein einzelnes Feature außerhalb des regulären Releases veröffentlicht werden, um es effektiv in einen Hotfix zu verwandeln. Mit der aktuellen Strategie kann ich einen Feature-Zweig rebasieren und direkt in den Master einbinden
- Es kommt auch vor, dass wir Funktionen zurückhalten müssen, nachdem Abnahmetests mit externen Systemen bei fehlgeschlagener Bereitstellung fehlgeschlagen sind
Wo ich nicht sicher bin über den Übergang:
- Derzeit erstelle ich Pull-Anforderungen zum Testen und füge Commits für Releases zusammen. Kann ich das vereinheitlichen?
- Wie gehe ich mit Hotfixes um, wenn der Master der neuesten Version voraus ist? Soll ich Releases direkt aus Hotfix-Zweigen erstellen und bereitstellen?
- Gibt es eine sinnvolle Möglichkeit, mit Funktionen umzugehen, die nach dem Zusammenführen von Funktionen von einer Freigabe ausgeschlossen werden sollten? Ist ein separater Entwicklungszweig in diesen Fällen wirklich von Vorteil? Die meiste Zeit ende ich damit, dass ich Commits sowieso manuell zurücksetze und wieder zurücksetze.