Ist eine Fusionsstrategie wie Git Flow wirklich ein Anti-Pattern?

30

Meine Firma verwendet Git und verwendet ein spezielles Verzweigungsschema - die Arbeit erfolgt im Master und die Verzweigungen sind für Veröffentlichungen reserviert. Dies funktioniert einwandfrei, solange die gesamte in einer Iteration geleistete Arbeit in den Zweig gelangt. Wenn jedoch ein kritisches Produktionsproblem auftritt, müssen wir sicherstellen, dass die Arbeit irgendwie in beide Zweige gelangt.

In letzter Zeit hatten wir ein bisschen "Spaß" mit diesen Filialen. Es war ein administrativer Aufwand, um sicherzustellen, dass die gesamte Arbeit in jeden Zweig gelangt, und einige Fehler, die in einem Zweig behoben wurden, werden erst dann zum Master, wenn jemand darauf hinweist, worum es geht.

Ich bin vor einiger Zeit auf Git Flow gestoßen, und ich habe das Gefühl, dass es eine Lösung für unser Problem sein könnte - Code, der nicht bis zur Veröffentlichung oder bis zum letzten Release durchläuft. Der einzige Haken ist, dass mein Hinweis angab, dass diese Art von Entwicklung ein Anti-Muster war - zwei Wochen lang wütend, dann drei, um die Zusammenführungskonflikte zu lösen.

Ich bin mir nicht ganz sicher, ob ich damit einverstanden bin, und seitdem ich es angesprochen habe, ist die Arbeit normal weitergegangen. Erst vor kurzem hatten wir einige Hauptschmerzpunkte damit.

Ich würde gerne wissen - warum sollte ein solches Entwicklungsschema als Anti-Muster angesehen werden? Ist es wirklich ein Anti-Muster?

Makoto
quelle
1
Der Abschnitt "Regel 3" aus Ted Dziubas altem Blogpost könnte veranschaulichen, wie es sich um ein Anti-Pattern handeln kann.
Isxek
5
IMO, je mehr Zeit Sie mit dem Nachdenken über die Versionskontrolle verbringen, desto mehr ist das Problem beim gesamten Benutzer aufgetreten -> Tool-Phänomen.
Erik Reppen
@ErikReppen: Ich möchte alle von der Versionskontrolle ablenken und einen Prozess haben, an den sich jeder gewöhnen kann. Auf diese Weise müssen wir uns keine Gedanken darüber machen, ob dies ein Anti-Pattern ist oder nicht.
Makoto
6
@Makoto Alles, was gegen KISS verstößt, ist ein Anti-Pattern, IMO. Hier neigen VCS-Power-User dazu, mich verrückt zu machen.
Erik Reppen
6
Der Begriff "Antipattern" ist insofern eine Art "Best Practice", als er oft als Entschuldigung dafür dient, dass Menschen ihr Gehirn abschalten. Akzeptiere diese Vorstellung nicht, wenn der Lead dir nicht klar sagen kann, welche Erfahrung er damit hat und warum es schlecht ist.
Kyralessa

Antworten:

30

Er bezieht sich hauptsächlich auf die Feature-Verzweigungsseite des Modells. Feature-Zweige wurden vor langer Zeit als Anti-Pattern deklariert, als die Zweige Monate dauerten und Versionskontrollsysteme nicht zusammengeführt werden konnten, um ihr Leben zu retten. Feature-Zweige, die ein oder zwei Wochen dauern, weisen wesentlich weniger Probleme auf, insbesondere wenn Sie während dieser Zeit kontinuierlich aus develop dem Feature-Zweig zusammengeführt werden. Alles, was viel länger ist, wird immer noch nicht empfohlen.

Auch wenn Sie die Feature-Verzweigungsseite von Git Flow nicht verwenden, sind die anderen Teile hilfreich, um sicherzustellen, dass Sie saubere Zusammenführungen erhalten und Ihre Änderungen in die richtige Richtung übertragen werden.

Karl Bielefeldt
quelle
3
Meine Erfahrung mit Feature-Zweigen oder der Art und Weise, wie wir sie erstellt haben, ist, dass es bei ihnen Herzschmerz geben kann, wenn sie länger als eine Iteration leben dürfen. Eine Regel, die besagt, dass alle Features in der Iteration vor der Veröffentlichung zusammengeführt werden müssen, wäre schön, um den Kummer der Zusammenführungen zu lindern - und Junge, hatten wir einige ernsthafte Kummer hinter diesen ...
Makoto
6
Ich habe die Erfahrung gemacht, dass Sie lokales Zeug so lange herumliegen lassen können, wie Sie es mit dem aktuellen Master zusammenführen und / oder entsprechend weiterentwickeln.
Jan Hudec
2
@JaHudec ... oder bis du zwei Dinge hast, die in irgendeiner Weise in Konflikt stehen. Sie sollten immer den Überblick darüber haben, was getan wird ...
Johannes
5
Lesen Sie ein wenig darüber nach, und Martin Fowlers Referenz scheint darauf hinzudeuten, dass Feature-Zweige, die in einem kontinuierlichen Integrationsfluss erstellt werden, funktionieren können - wenn sie in kleineren Schritten erstellt werden, als die meisten Leute es in Betracht ziehen würden. In gewisser Hinsicht haben Sie also Recht - weniger als zwei Wochen, um in einem Feature-Zweig zu leben, scheinen angemessen. Ich verstehe jedoch nicht, wie Feature-Zweige selbst das Anti-Pattern sind.
Makoto
3
Du hast recht. Sie sind nur dann ein Anti-Muster, wenn sie zu lange leben, ohne zusammengeführt zu werden. Manchmal schimpfen die Leute immer noch gegen eine Idee, wenn sie sich nicht an die zugrunde liegenden Gründe erinnern.
Karl Bielefeldt
21

Das Zusammenführen ist eine lustige Sache - je seltener es gemacht wird, desto schwerer wird es, desto mehr Menschen werden sich davor fürchten, desto seltener werden sie es tun.

Die Lösung besteht darin, Verzweigungen nicht zu stark abweichen zu lassen oder Verzweigungen nicht zu verwenden.

Wenn die Leute das verstehen, werden Sie wahrscheinlich nicht viele Probleme mit dem Zusammenführen haben, wenn nicht - möglicherweise sind Zweigstellen keine gute Idee ohne eine gewisse Ausbildung.

maxim1000
quelle
1
Nein, keine Zweige zu benutzen ist ein Nichtstarter. Das andere Hauptproblem wäre, dass die Arbeit an zwei verschiedenen Stellen im selben Code ausgeführt werden kann. Hoffentlich können wir auch hier Abhilfe schaffen.
Makoto
12
@makoto, oft macht das Entkoppeln von Dingen im Code Konflikte weniger häufig. Dabei kann es sich entweder um eine einfache Unterteilung einer Funktionalität in Funktionen / Klassen oder um die Vermeidung undokumentierter Annahmen zwischen Modulen handeln. Dann werden Änderungen lokalisierter.
maxim1000
1
@ maxim1000 Ich stimme zu. Ich denke, jemand sagte einmal etwas wie "Ein VCS ist eine arme Alternative zur modularen [entkoppelten] Architektur"
8DH
+1 für den ersten Absatz. Und ja, ohne Ausbildung ist gitflow-like eine Sackgasse
daitangio