Ist es ratsam, bei der Verwendung von Git den Master-Zweig für die aktive Entwicklung zu verwenden?

32

Zunächst einige Hintergrundinformationen. Wir sind dabei, alle unsere Projektteams auf die Verwendung von Git umzustellen und die Richtlinien für die Organisation der Repositorys festzulegen, damit bestimmte Filialen auch auf ihre kontinuierliche Integration und Integration hin überwacht werden können automatische Bereitstellung auf den Testservern. Derzeit werden zwei Modelle entwickelt:

  1. Stark beeinflusst durch den Artikel von nvie.com zur erfolgreichen Verzweigung, wobei der Hauptzweig den stabilsten Code darstellt, ein Entwicklungszweig für den aktuellen Code und ein Integrationszweig für Code, der für QA-Tests bereit ist.

  2. Ein alternatives Modell, bei dem der Hauptzweig den neuesten Entwicklungscode darstellt, ein Integrationszweig für Code, der für QA-Tests bereit ist, und ein Produktionszweig für den stabilen Code, der für die Bereitstellung bereit ist.

An diesem Punkt ist es teilweise eine Frage der Semantik in Bezug auf das, was der Hauptzweig darstellt, aber ist es eine gute Praxis, die Hauptzweig aktiv weiterzuentwickeln, oder ist es nicht wirklich so relevant?

rjzii
quelle
1
Ich mag das worfklow, mit dem Scott Chacon GitHub entwickelt: scottchacon.com/2011/08/31/github-flow.html
user16764
1
Wie beschrieben, scheint es mir eher ein semantisches Problem zu sein, denn jede Organisation wird ihre eigenen Prozesse weiterentwickeln. In einigen Punkten müssen die Namen Ihren Workflow widerspiegeln. Im Allgemeinen scheint der Schlüssel zu sein, dass Sie irgendwo etwas definieren, so dass "der Quellcode von HEAD immer einen produktionsbereiten Zustand widerspiegelt". Das, was Sie als das bezeichnen, ist weniger wichtig, aber sowohl Git-Flow als auch der GitHub-Workflow konzentrieren sich auf diese Trennung und auf die Steuerung, wenn Sie zu dem produktionsbereiten "Ding"
Murph
@Murph - Stimmt, aber da wir einige davon von Grund auf neu machen, dachte ich, es wäre am besten, mehr oder weniger den üblichen Konventionen zu folgen, damit neue Entwickler, die eingestellt werden, aufgrund ungewöhnlicher interner Praktiken keine steile Lernkurve haben.
rjzii
Dann haben Sie Ihre eigene Frage beantwortet (-: Um ehrlich zu sein, auch wenn Sie die Frage stellen, sind Sie der Kurve weit voraus ...
Murph

Antworten:

33

Das einzige wirkliche definierende Merkmal des masterZweigs ist, dass es für einige Operationen die Standardeinstellung ist. Außerdem haben Filialnamen nur innerhalb eines bestimmten Repositorys eine Bedeutung. Ich masterkönnte developmentzum Beispiel auf Ihre verweisen . Eine masterVerzweigung ist auch nicht erforderlich. Wenn also Unklarheiten darüber bestehen, welche Verzweigung es sein soll, rate ich normalerweise, sie ganz wegzulassen.

Meiner Meinung nach ist es jedoch am besten, wenn Sie die Standardeinstellung für Push-to-Vorgänge verwenden. Die meisten Online-Tutorials, die Ihre Entwickler lesen, gehen davon aus. Es ist also sehr sinnvoll, die masterBranche zu haben, die am häufigsten angesteuert wird. Einige Leute denken, dass es die makellose Kopie ist, die für Entwickler unantastbar ist, außer nach strengster Prüfung, aber wenn man es auf diese Weise verwendet, werden viele der hilfreichen Standardeinstellungen entfernt, die git bereitstellt. Wenn Sie einen solchen unberührten Zweig haben möchten, würde ich ihn in ein völlig separates Repository stellen, in das nur einige Leute schreiben können.

Karl Bielefeldt
quelle
7
+1. Und da der "produktionsbereite" Code der wichtige Code ist, sollte er auch in einer Filiale mit einem Namen leben, der diese Bedeutung hervorhebt. "master" als Standard-Filialname erfüllt diese Anforderung mit Sicherheit nicht, da es auch in jedem anderen Repository für beliebige Zwecke verwendet wird.
Bananeweizen
4
+1. Dies ist die reale Antwort. Um den Punkt zu unterstreichen: Niemand in Ihrem Team hat den "Master" -Zweig definiert, wie es das Git-System tat. Halten Sie sich für alles Wichtige an die Zweige, die jemand in Ihrem Team definiert hat.
Travis Wilson
1
Stimme absolut zu. Während ich das Git-Flow-Modell ( nvie.com/posts/a-successful-git-branching-model ) sehr mag , ist das einzige, was mich dort stört, dass master ausschließlich für Releases reserviert ist, was nicht intuitiv ist.
Bachi
12

Nein, es ist nicht ratsam, auch nicht am Anfang, bevor Sie zur Qualitätssicherung gegangen sind. Als Best Practice sollte das Entwicklungsmuster von Anfang bis Ende konsistent sein. Ihr Master-Zweig sollte zunächst leer sein, Sie sollten Ihren Entwicklungszweig abzweigen und mit dem Hinzufügen von Dateien beginnen, mit Ihrem Integrationszweig zusammenführen und anschließend mit Ihrem Master-Zweig verbinden.

Während sich während der Entwicklung niemand darum kümmert, dass der Master-Zweig nicht gebaut wird, neigt er früh zu schlechten Gewohnheiten. Der Master sollte immer erstellen, und für wichtige Feature-Releases wäre es auch keine schlechte Idee, Zweige mit wichtigen Builds zu archivieren, damit stabile Release-Points bei Bedarf wiederhergestellt werden können.

Joel Etherton
quelle
3
Ist es nicht besser, die Versionsverfolgung über Tags durchzuführen?
Adonis K. Kakoulidis
1
@AdonisK .: Ich sehe die Relevanz Ihrer Frage nicht.
Joel Etherton