Was sind die Vor- und Nachteile von Git-Flow gegenüber Github-Flow? [geschlossen]

124

Wir haben vor kurzem begonnen, GitLab zu verwenden.

Derzeit wird ein "zentraler" Workflow verwendet.

Wir überlegen, auf den Github-Flow umzusteigen, aber ich möchte sichergehen.

Was sind die Vor- und Nachteile von Git-Flow gegenüber Github-Flow ?

Paul McKenzie
quelle

Antworten:

133

Wie in GitMinutes Episode 17 von Nicholas Zakas in seinem Artikel über " GitHub-Workflows innerhalb eines Unternehmens " beschrieben:

Git-Flow ist ein Prozess zum Verwalten von Änderungen in Git, der von Vincent Driessen erstellt wurde und von einigen Git-Erweiterungen zum Verwalten dieses Flusses begleitet wird.
Die allgemeine Idee hinter Git-Flow ist mehrere getrennte Zweige zu haben , die immer, die jeweils für einen anderen Zweck existieren: master, develop, feature, release, und hotfix.
Der Prozess der Feature- oder Fehlerentwicklung fließt von einem Zweig in einen anderen, bevor er endgültig veröffentlicht wird.

Einige der Befragten gaben an, dass sie git-flowim Allgemeinen verwenden.
Einige begannen damit git-flowund gingen davon weg.

Der Hauptgrund für die Abkehr ist, dass der git-flowProzess in einem kontinuierlichen (oder nahezu kontinuierlichen) Bereitstellungsmodell schwer zu bewältigen ist.
Das allgemeine Gefühl ist, dass es git-flowfür Produkte in einem traditionelleren Release-Modell gut funktioniert, bei dem Releases alle paar Wochen durchgeführt werden, dieser Prozess jedoch erheblich unterbrochen wird, wenn Sie einmal am Tag oder öfter veröffentlichen .

Zusamenfassend:

Beginnen Sie mit einem Modell, das so einfach wie möglich ist (wie es GitHub Flow normalerweise tut), und wechseln Sie bei Bedarf zu einem komplexeren Modell.


Eine interessante Illustration eines einfachen Workflows, der auf GitHub-Flow basiert, finden Sie unter:
" Ein einfaches Git-Verzweigungsmodell ". Die Hauptelemente sind:

  1. master muss immer bereit sein.
  2. alle Änderungen, die über Feature-Zweige vorgenommen wurden (Pull-Request + Merge)
  3. Rebase zur Vermeidung / Lösung von Konflikten; Vereinenmaster

https://a248.e.akamai.net/camo.github.com/9783623eba280ba5ace8b9e63842be52af2f0546/687474703a2f2f7374617469632e62656e65742e61692f736b697463682f3662333333372


Einen tatsächlich vollständigeren und robusteren Workflow finden Sie unter Gitworkflow (ein Wort) .

VonC
quelle
88

Es gibt keinen Silver Bullet-Workflow, dem jeder folgen sollte, da alle Modelle nicht optimal sind. Trotzdem können Sie das geeignete Modell für Ihre Software anhand der folgenden Punkte auswählen.

Mehrere Versionen in der Produktion - verwenden Sie Git-Flow

Wenn Ihr Code mehrere Versionen in der Produktion hat (dh typische Softwareprodukte wie Betriebssysteme, Office-Pakete, benutzerdefinierte Anwendungen usw.), können Sie git-flow verwenden. Hauptgrund ist, dass Sie frühere Versionen in der Produktion kontinuierlich unterstützen müssen, während Sie die nächste Version entwickeln.

Einzelversion in der Produktion einfache Software - verwenden Sie Github-Flow

Wenn Ihr Code immer nur eine Version in der Produktion hat (z. B. Websites, Webdienste usw.), können Sie github-flow verwenden. Hauptgrund ist, dass Sie für den Entwickler keine komplexen Dinge benötigen. Sobald der Entwickler ein Feature oder einen Bugfix fertiggestellt hat, wird er sofort zur Produktionsversion hochgestuft.

Einzelversion in der Produktion, aber sehr komplexe Software - verwenden Sie Gitlab-Flow

Bei großer Software wie Facebook und Google Mail müssen Sie möglicherweise Bereitstellungszweige zwischen Ihrem Zweig und dem Hauptzweig einführen, in denen CI / CD> -Tools ausgeführt werden können, bevor sie in die Produktion gelangen. Die Idee ist, die Produktionsversion besser zu schützen, da sie von Millionen von Menschen verwendet wird.

Gayan Pathirage
quelle
7
Fügen Sie einfach "Gitdmz-flow" / "Git DMZ Flow" zur Liste hinzu: gist.github.com/djspiewak/9f2f91085607a4859a66
Robert Fey
1
Die genannten Unternehmen verwenden ein Trunk-basiertes System. paulhammant.com/2014/01/08/…
PatrickWalker
1
Git DMZ Flow ist Gitflow ähnlicher und DMZ Branch ist wie Develop Branch. Daher fühle ich nichts Besonderes daran.
Gayan Pathirage
2
Nach meinem Verständnis funktioniert Git-Flow nicht gut mit Versionen mit mehreren Produktionen. Bei der Hotfix-Strategie wird davon ausgegangen, dass Sie nur eine Produktionsversion haben und Hotfix für den entsprechenden Release-Zweig ausführen (und später wieder zusammenführen, um den Zweig zu entwickeln). Es scheint nicht zu berücksichtigen, wie Sie einen Fehler beheben können, der in mehreren Produktionszweigen vorhanden ist.
Adrian Shum
5
@GayanPathirage Eigentlich ist es nicht. 1. "klassische" GitFlow-Tags beim Master. In der Hotfix-Verzweigung können Sie nur einen Fix für die neueste Produktionsversion (vom Master) durchführen. 2. "Release-Zweig" bedeutet etwas anderes in Gitflow, das eigentlich der Pre-Release-Vorschau-Zweig ist (Verzweigung vom Entwicklungszweig und darauf ausgerichtet, zum Master zusammengeführt zu werden, wenn er wirklich veröffentlicht wird). 3. Was Sie meinen, ist etwas, das in GitFlow als "Support-Zweig" bezeichnet wird (das ist ein Grund, warum ich GitFlow nicht mag: unkonventionelle Terminologie). Es ist jedoch immer noch ein experimenteller Ablauf (so dass Sie ihn in den meisten Gitflow-Intros nicht sehen)
Adrian Shum
38

Ich benutze das Git-Flow-Modell seit über einem Jahr und es ist in Ordnung.

Aber es hängt wirklich davon ab, wie Ihre Anwendung entwickelt und bereitgestellt wird.

Dies funktioniert gut, wenn Sie eine Anwendung mit einem langsamen Entwicklungs- / Bereitstellungsfluss haben.

Aber zum Beispiel haben wir wie GitHub eine Anwendung mit einem schnellen Entwicklungs- / Bereitstellungsablauf, die wir täglich bereitstellen, und manchmal mehrmals am Tag. In diesem Fall verlangsamt Git-Flow meiner Meinung nach alles, und ich verwende GitHub fließen.

Die andere zu berücksichtigende Sache ist, dass Git-Flow kein Standard-Git ist, also könnten Sie, und wenn ich sage, dass Sie es könnten, ich meine wirklich, Sie werden Entwickler finden, die es nicht wissen, und dann gibt es die Lernkurve, mehr Chance, Dinge durcheinander zu bringen. Wie oben erwähnt, hat jemand eine Reihe von Skripten entwickelt, um die Verwendung von git-flow zu vereinfachen. Sie müssen sich also nicht alle Befehle merken, es hilft Ihnen bei den Befehlen, aber es ist Ihre Aufgabe, sich an den tatsächlichen Ablauf zu erinnern Ich bin mehr als einmal darauf gestoßen, als ein Entwickler nicht wusste, ob es sich um einen Hotfix oder eine Funktion handelt, oder sogar am schlimmsten, wenn er sich nicht an den Ablauf erinnern und die Dinge vollstopfen kann.

Es gibt mindestens eine GUI, die Git-Flow für Mac und Windows SourceTree unterstützt .

Heutzutage neige ich aufgrund seiner Einfachheit und einfachen Verwaltung eher zum GitHub-Flow. Auch wegen "häufig frühzeitig bereitstellen" ...

Hoffe das hilft

Diego Antunes
quelle
+1. Ich stimme mit Ihnen ein.
VonC
2
GitHub Flow befindet sich in Git-Flow. Denken Sie, wenn Sie eine kontinuierliche Integration und Bereitstellung benötigen, können Sie einfach so viel wie möglich mit dem Entwicklungszweig ausführen. Jedes Feature ist vom Entwicklungszweig verzweigt. Möglicherweise benötigen Sie den Hauptzweig oder die Freigabezweige nur, wenn Sie über komplexe Bereitstellungsmodelle verfügen. (z. B. Ihre 1.1-Version ist auf einem Client live, Ihre 1.2 ist auf einem anderen Client live und derzeit entwickeln Sie 1.3 für Ihren neuen Client.) Alle 3 Clients werden nach Fehlerkorrekturen und Änderungen an ihrer jeweiligen Version fragen.
Gayan Pathirage
Hallo Diego und danke für deine Antwort. Was ist mit der Wartung mehrerer Versionen? Machst du es einfach mit Git Flow? Ich habe gehört, es ist schwierig, da Sie Support-Niederlassungen benötigen! Glauben Sie, dass das Modell dafür gut geeignet ist?
Luis Gouveia
1
Hallo Luis, ich denke, Sie können das Modell zum Laufen bringen, aber ich habe wieder das Gefühl, dass Sie dasselbe mit einem Standard-Git-Workflow erreichen können.
Diego Antunes
1
@LuisGouveia Tatsächlich bin ich seit Ihrer Frage und meiner Antwort oben auf ein Projekt gestoßen, bei dem git-flow perfekt funktioniert, und ich bin Eigentümer des Projekts. Die Idee ist, git flow release...in Kombination mit Github-Aktionen die Anwendung bereitzustellen. In meiner ursprünglichen Antwort erwähnte ich, dass wir mehrmals am Tag veröffentlicht haben. Dies verursachte Probleme bei der Verwendung von Git-Flow. Der Grund, warum ich denke, dass Git-Flow in diesem Projekt gut funktionieren wird, ist, dass wir einen vordefinierten Release-Zyklus haben, der eines der Hauptverkaufsargumente für die Verwendung von Git-Flow ist.
Diego Antunes