Mir ist in letzter Zeit aufgefallen, dass es bei einigen beliebten Projekten auf GitHub keine develop
Filiale gibt. Tatsächlich erwähnt der GitHub Flow Guide dies auch nicht. Nach meinem Verständnis master
sollte immer absolut stabil sein und die Produktion widerspiegeln. Wenn Entwickler an Feature-Zweigen arbeiten und diese anschließend zusammenführen master
, bedeutet dies, dass in einem bestimmten Zeitraum Features / Fixes zusammengeführt werden master
und der master
Zweig tatsächlich neuer als die Produktion ist.
Wäre es nicht sinnvoller, wenn das Team Feature- / Fix-Verzweigungen erstellt develop
, diese wieder zusammenführt und dann, wenn die nächste Version vollständig zur Veröffentlichung bereit develop
ist, zusammengeführt master
und ein Tag erstellt wird? Stellen Sie sich vor, die Leute gehen direkt ineinander über master
und es wird ein Fehler in der Produktion gemeldet, der sich nur schwer beheben lässt, weil sich die master
Codebasis der Zweige erheblich geändert hat. Dann müssen die Entwickler den Benutzer lediglich auffordern, bis zur nächsten Version zu warten, damit das Problem behoben wird.
EDIT: Diese Frage ist anders als "zu verzweigen oder nicht zu verzweigen." Es richtet sich speziell an Personen, die nicht mehr auf den Entwicklungszweig zurückgreifen, und an die Gründe dafür, da dies lange Zeit als Best Practice angepriesen wurde.
Antworten:
Es kommt aus der CI- Denkweise, bei der mehrmals täglich eine Integration stattfindet.
Es gibt Vor- und Nachteile von beiden.
In unserem Team haben wir auch die Entwicklungsbranche aufgegeben, da wir der Ansicht waren, dass sie keinen zusätzlichen Nutzen mit ein paar Nachteilen bringt. Wir haben unsere CI-Software (Teamcity) so konfiguriert, dass die folgenden Nachteile behoben werden:
Der Grund dafür ist, dass alle Pull-Anforderungen möglicherweise freigebbaren Code enthalten. Dies bedeutet jedoch nicht, dass wir alle Commits in master bereitstellen.
Der Hauptgrund, warum wir den Entwicklungszweig aufgegeben haben, ist, dass er zu groß und zu zeitaufwendig wurde, um zu sehen, was er tatsächlich enthielt. Wenn wir etwas vorzeitig bereitgestellt haben, verzweigen wir einfach einen Hotfix-Zweig und stellen ihn direkt bereit.
quelle
master
, sodass Sie, wenn später ein Fehler auftritt, dermaster
sich im Fluss befindet, problemlos einen Hotfix vom 1.3-Tag abzweigen können.Ein Entwicklungszweig ist wichtiger, wenn Ihr Release-Prozess komplex ist und Sie ernsthafte Release-Kandidaten benötigen.
Stellen Sie sich zum Beispiel vor, Sie schreiben Software, die Firmware für Autos ist. Dies ist nicht trivial zu beheben und es ist wahrscheinlich, dass in jedem Release eine umfassende Reihe von Nicht-CI- / Integrationstests auf echter Hardware ausgeführt wird.
In diesem Fall ist es möglicherweise sinnvoller, einen "Release Candidate" in einem Nicht-Master-Zweig (z. B. "Develop") zu isolieren. Dies ermöglicht Ihrem Team, das diese Tests durchführt, eine Verzweigung, in der Features zusammengeführt werden können.
Webapps oder andere leicht zu aktualisierende Software unterliegen dieser Einschränkung nicht.
Beachten Sie jedoch Folgendes:
quelle
Es gibt zwei Philosophien, die ich in Projekten gesehen habe, und ich denke, die Wahl ist nur eine Frage des Geschmacks:
Bestimmen Sie "master" als Produktions-Release und entwickeln Sie in einem "Develop" -Zweig.
Entwickeln Sie sich in 'master' und haben Sie einen Zweig mit einem anderen Namen für stabile Produktionsfreigaben. Dies ist umso sinnvoller, wenn Ihr Projekt gleichzeitig über mehrere Release-Zweige verfügt (z. B. das derzeit bevorzugte Release ist Release 1.8, Sie behalten jedoch weiterhin Release 1.7 bei).
Beides sind gemeinsame Ansätze und haben Vor- und Nachteile.
quelle
Produktionsfreigaben können mit Tags versehen werden, sodass die freigegebene Situation jederzeit reproduziert werden kann, ohne dass eine ganze Filiale für diesen Zweck reserviert wird.
Wenn ein kritischer Fehler in der Produktion zu einem Zeitpunkt festgestellt wird, an dem der Master nicht freigegeben werden kann, ist es einfach genug, das Tag zu überprüfen und von dort aus einen neuen "Hotfixes-für-Release-1.2.0" -Zweig zu starten. Das dürfte aber eher selten sein.
Die meiste Zeit in unseren Webanwendungen hat sich der Master seit der letzten Version geändert, jedoch nicht wesentlich. Daher können wir einfach eine neue Version von Master erstellen, die den Fix enthält. Es hilft sowieso, sehr häufig Releases zu machen.
quelle
Das ist kein Github Flow.
Dies ist der Bereitstellungs- / Zusammenführungsprozess von Github Flow gemäß Ihrem Link:
(Betonung meiner)
Mit anderen Worten,
master
wird nie vor der Produktion sein. In ähnlicher Weise ist ermaster
(abgesehen von unentdeckten Fehlern) immer in einem stabilen, freigebbaren Zustand, da alles überprüft, getestet und für die Produktion bereitgestellt wird, bevor es mit dem Server zusammengeführt wirdmaster
.quelle
master
ist immer Ihre Rollback-Position, wenn der Feature-Zweig, den Sie in die Produktion verschieben, ausfällt. Wenn dies nicht der Fall ist, wird esmaster
zum neuen Fallback. Ich mag das.Das Problem, das ich sehe, ist, dass Git / Hub-Flow-Bereitstellung / Zusammenführung davon ausgeht, dass eine Funktion gleichzeitig entwickelt / getestet / zusammengeführt / bereitgestellt wird - und meiner Erfahrung nach ist dies häufig nicht der Fall. Wenn wir jeweils ein Feature zusammenführen, besteht eine größere Wahrscheinlichkeit für Regressionsprobleme. Diese treten erst auf, nachdem die Features zum Master zusammengeführt wurden und möglicherweise in der Produktion sind.
Es muss eine Möglichkeit geben, mehrere Funktionen zu testen, mehrere Funktionen zusammenzuführen und dieselbe bereitzustellen. Ich habe einen 'Bundle Branch' (einen Branch, der aus einem Master mit darin zusammengeführten Test Ready Feature Branches erstellt wurde) verwendet, der in qa / uat implementiert wird. Korrekturen während des UAT werden nur für den Feature-Zweig durchgeführt, und diese werden wieder in den Bundle-Zweig eingefügt. Nachdem ein Unterabschnitt des Bundle-Zweigs genehmigt wurde, werden nur die genehmigten Features im Bundle vom Master angefordert - und der Zyklus wird fortgesetzt.
Ich verwende dies mit Gitflow, denke aber darüber nach, es für GitHub Flow zu verwenden. Die QA / UAT-Funktion für viele Funktionen zu einem bestimmten Zeitpunkt scheint von Bedeutung zu sein. Ein weiteres Problem mit GitHub Flow ist, dass alle sr-Entwickler davon ausgehen, und das ist nicht immer der Fall.
Ich würde den GitHub-Flow aufgrund seiner Vereinfachung eher verwenden. Ich denke, mit einem Bundle-ähnlichen Feature wäre es besser, bereit zu sein. Möglicherweise ähnelt das Bundle dem Release. Ich denke aber auch noch darüber nach.
Ein weiteres Problem ist, dass der Pull-Request-Prozess am Ende vor dem Zusammenführen zum Master stattfindet. Manchmal möchten Sie jedoch eine Codeüberprüfung vor dem Testen der Geschäftsqualität durchführen - also lange vor dem Zusammenführen
quelle