Haben Sie eine Produktionsniederlassung oder verwenden Sie Master?

16

Ich arbeite in einem kleinen Team mit anderen Remote-Entwicklern an einer RailsAnwendung. Wir fangen an, unseren gitWorkflow 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?


quelle
Meiner Erfahrung nach lohnt es sich, einen Ort zu haben, an dem sich die Leute nach Belieben festlegen können (sei es für das tägliche Einchecken oder was auch immer) - ohne die Anforderungen für "Immer kompilieren". Ohne dies verzögern die Leute das Einchecken und laufen Gefahr, bei Unfällen Code zu verlieren (z. B. Festplattenabsturz). Dann ist es an ihnen, eine sinnvolle Version von dort zu verbreiten und sie in Richtung des Integrationsstroms "freizugeben". Mein bevorzugter Satz von Stufen ist also (dev) -> (units) -> (integration) -> (test) -> (production)
BitTickler
2
Wir verwenden den auf dieser Site beschriebenen Git-Workflow mit ein paar Unterschieden erfolgreich. nvie.com/posts/a-successful-git-branching-model Der einzige Unterschied ist, dass wir es vorziehen, lokale Filialen zu entwickeln, um eine saubere Historie zu erhalten und der Logik "one commit, one issue" zu folgen
Jepessen,
Was passiert normalerweise in Ihrem Hirschzweig?
Simgineer
Empfohlen für klarere CI / CD. master branch wird nicht verwendet, da es möglicherweise falsch interpretiert wird. {Entwicklung} - {Einheit} - {Integration} - {Inszenierung} - {Produktion}. in blau / grün mit fortlaufender Produktion von> aktivem Slice und Staging> inaktivem Slice. KOPF> Zweig entwickeln, in dem Features verzweigt sind. Entwickeln Sie mit Webhooks, um Builds für Einheiten auszulösen, die zur Integration und zum Staging übergehen (mit geeigneten Tags bei bestandener Integration). Hotfixes in Richtung Entwicklung + Produktion (selten, aber es kommt vor). mehr Feinheiten, aber eine allgemeine Idee.
Jimmy MG Lim

Antworten:

16

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.

Makoto
quelle
1
Ich denke wirklich, dass Sie einen guten Punkt getroffen haben. Danke für die Rückmeldung.
+1 für das Markieren von Commits. Ich arbeite die meiste Zeit alleine, aber ich tagge Veröffentlichungen aus zwei Gründen. 1) Es funktioniert hervorragend mit visuellen Tools für den Git-Verlauf, um zu zeigen, welche Commits tatsächlich produziert wurden. 2) Es funktioniert hervorragend mit Tools wie GitHub, mit denen Release-Versionen gepackt werden können, indem das getaggte Commit ausgecheckt und für den Verbrauch in eine Zip-Datei gepackt wird.
Nbering
9

Ich kann dein Dilemma sehen. Ich hatte es auch, bis ich verlernte, was ich immer über Meister annahm.

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.

Aus Git-Dokumentation / Buch - Git-Verzweigung

Der "Master" -Zweig in Git ist kein spezieller Zweig. Es ist genau wie in jeder anderen Branche. Der einzige Grund, warum fast jedes Repository eines hat, ist, dass der Befehl git init es standardmäßig erstellt und die meisten Leute sich nicht die Mühe machen, es zu ändern.

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 Namen masterzu ändern, produm einen Workflow wie den folgenden zu verwenden:

(dev) -> (qa) -> (stag) -> (prod)

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 ändern master, tun Sie dies auf jeden Fall :-)

Sumeet Pareek
quelle
Das ist ein sehr guter Punkt. Danke, dass du das geklärt hast. Ich weiß nicht, ob wir so weit gehen werden, um sie umzubenennen, aber es ist gut zu wissen, dass git den Meister nicht auf besondere Weise behandelt. Vielen Dank!
6

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:

  1. Neue Entwickler können den falschen Zweig nicht ändern (da sie ihre Arbeit nicht direkt in das Hauptrepo verschieben können). Sie könnten masterauf ihr eigenes Repo pushen, aber das wird behoben, wenn die Pull-Anfrage eingeht.

  2. 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.

Aaron Digulla
quelle
1

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.

BitTickler
quelle