Ich arbeite in einem kleinen Team mit anderen Remote-Entwicklern an einer Rails
Anwendung. Wir fangen an, unseren git
Workflow zu ändern . Wir haben über eine Verzweigungsstruktur wie folgt nachgedacht:
(dev) -> (qa) -> (stag) -> (master)
Einige Entwickler hielten es jedoch für weniger verwirrend, wenn neue Entwickler automatisch auf die Master-Produktion umsteigen. Sie dachten stattdessen, jeder solle am Master arbeiten und einen eigenen Zweig für die Produktion schaffen.
(master) -> (qa) -> (stag) -> (prod)
Mir wurde beigebracht, dass Sie den Master bereitstellen und nicht als Entwicklung verwenden möchten und dass von früheren Orten, an denen ich gearbeitet habe, der Master immer für die Produktion bereitstellbar sein soll.
Was wären einige der Nachteile einer Verzweigungsstruktur, bei der der Master aktiv für die Entwicklung verwendet wird und für die Sie einen separaten Produktzweig verwenden?
Antworten:
Dieser Ansatz hat weder Vor- noch Nachteile. Der Grund, warum ich das sage, ist einfach: Für Git macht es keinen Unterschied, ob Sie sich vom Master entwickeln oder vom Master freigeben. Sie müssen nicht einmal Zweige freigeben. Sie könnten stattdessen ein beliebiges Commit markieren und dieses freigeben.
Das eigentliche Problem ist hier ein Prozess und eine Prozedur. Je älter die Entwickler sind, die befürchten, dass dies auf eine Weise verwirrt, desto mehr müssen die neueren Entwickler darauf vorbereitet sein, die Zeit zu investieren, um zu erklären, was das Release-Modell ist und warum es so ist.
Solange jeder versteht, dass der Master für die Entwicklung bestimmt ist und ein anderer beliebiger Zweig für Veröffentlichungen bestimmt ist und die Arbeit, um dies aufrechtzuerhalten, erledigt ist , sollte es bei diesem Ansatz keine Probleme geben.
quelle
Ich kann dein Dilemma sehen. Ich hatte es auch, bis ich verlernte, was ich immer über Meister annahm.
Aus Git-Dokumentation / Buch - Git-Verzweigung
Wenn Sie also einen bevorzugten Workflow haben und es schwierig ist, damit zu arbeiten, haben verschiedene Entwickler im Team unterschiedliche Vorstellungen
master
. Sie könnten sogar erwägen, den Namenmaster
zu ändern,prod
um einen Workflow wie den folgenden zu verwenden:So ändern Sie den Namen des Hauptzweigs .
Ich sage NICHT, dass Sie den Filialnamen ändern müssen
master
. Aber wenn Sie einen bevorzugten Workflow haben und es hilfreich ist, den Filialnamen zu ändernmaster
, tun Sie dies auf jeden Fall :-)quelle
In diesem Fall ziehe ich Überprüfungen Konventionen vor. In jedem Team gibt es Mitglieder, die besser in der Lage sind, neue Funktionen zu entwickeln, und andere, die besser in der Lage sind, die Dinge für eine Veröffentlichung zu stabilisieren.
Wenn Ihnen letzteres fehlt, helfen Codeüberprüfungen (häufig wollen die disziplinierteren Leute sowieso Codeüberprüfungen).
Aus diesem Grund konfigurieren wir unser Git-Repo (wir verwenden Gitlab) so, dass nur bestimmte Personen Pull-Requests zusammenführen können und jeder Entwickler seinen eigenen privaten Zweig des Haupt-Repos erhält.
Das löst zwei Probleme:
Neue Entwickler können den falschen Zweig nicht ändern (da sie ihre Arbeit nicht direkt in das Hauptrepo verschieben können). Sie könnten
master
auf ihr eigenes Repo pushen, aber das wird behoben, wenn die Pull-Anfrage eingeht.Code-Konventionen verbreiten sich schnell im Team, da jedes Commit von mindestens einer anderen Person überprüft wird, die ihre Sichtweise und ihr Wissen einbringt.
quelle
Es hängt alles vom gesamten Softwareentwicklungsprozess ab. Das Konfigurationsmanagement und die Entstehung einer neuen Version können nicht definiert werden, ohne den Gesamtprozess zu kennen.
Es gibt die "agile" Fraktion, die sich für einen "immer funktionierenden First Commit-Bereich" entscheiden würde. Sie würden ständig automatisierte Bau- und Testeinrichtungen in diesem Bereich betreiben und versuchen, "jederzeit" ein funktionierendes System zu haben.
Sie würden die (Master) -> (Release) mit vielleicht 1,2 Zwischenschritten Organisation als vorteilhaft ansehen.
Dann gibt es die eher "klassische" Fraktion, deren Prozess von der Planung und den geplanten Integrationsschritten in Richtung Meilensteine getrieben wird. Dabei ist eine "Arbeitseinheitenfreigabe" eine geplante Aktivität mit Anforderungen wie "Nur freigeben, wenn sie (Einheiten-) getestet wird." und soll zum nächsten geplanten Meilenstein passen ". Dort umfasst die Planung die Versionierung von "Arbeitseinheiten", und in der Regel werden sie so bemessen, dass definiert wird, wie die nächste geplante Produktversion in Bezug auf Funktionen und Fehlerbehebungen aussehen soll. Zum Zwecke der Planung möchten sie wissen, dass das, was ein Entwickler veröffentlicht, "richtig" und ein bewusster Akt des Festlegens einer Arbeitseinheit ist.
Dieser klassische Ansatz bedeutet nicht zwangsläufig, dass es längere Zeiten gibt, in denen keine vollständige Produkterstellung verfügbar ist.
Der "klassische" Workflow wäre also: (dev) -> (unit) -> (integration) -> (test / qa) -> (production).
Die Rolle des Integrators besteht darin, freigegebene Einheiten zu "akzeptieren / kaufen" oder abzulehnen, wenn sie nicht den Anforderungen des nächsten Releases entsprechen.
Nebenbei bemerkt ist es auch möglich, diese beiden grundlegenden Ansätze auf geeignete Weise zu mischen.
Aus meiner Erfahrung (die hauptsächlich im Bereich der Verwendung des "klassischen" Ansatzes lag) funktionierte der "klassische" Ansatz in Projekten von etwa 4-50 Personen in einem Team recht gut.
quelle