GitHub Flow wird vor dem Zusammenführen mit dem Master für die Produktion bereitgestellt: Wird ein zweites Feature das erste nicht überschreiben?

8

Im Verständnis von GitHub Fluss, wie man sieht hier , ein Merkmal, nach dem Code - Review, wird zunächst auf der Produktion eingesetzt wird , dann in Master verschmolzen.

Wenn es ein zweites Feature gibt, das von demselben Commit wie das erste Feature verzweigt ist und das auch direkt für die Produktion bereitgestellt wird, enthält die Produktion das erste Feature nicht mehr.

erstes Feature in Master zusammengeführt

gemacht bei learngitbranching.js.org

Wie kann c3 nach der Bereitstellung bereitgestellt werden, bevor es mit c2 oder c4 zusammengeführt wird?

Wie geht GitHub Flow mit diesem Problem um?

Eine naheliegende Lösung wäre, zu verlangen, dass ein Feature erneut auf den Master übertragen wird, bevor es für die Produktion bereitgestellt wird. Dies ist jedoch anfällig für menschliches Versagen. Wenn man vergisst, neu zu gründen, fehlt der Produktion jetzt eine Funktion.

Ich würde mich besonders über Antworten von denen freuen, die Erfahrung mit GitHub Flow haben. Wie haben Sie dieses Problem nicht?

DarkSigma
quelle

Antworten:

1

Gute Nachrichten! GitHub hat einen Artikel darüber!

Sie identifizieren drei Sicherheitsmaßnahmen:

  • Stellen Sie sicher, dass es seine Tests besteht. Dies ist hoffentlich Teil der meisten Bereitstellungsworkflows. Aber es ist eine der "Sicherheitsmaßnahmen", die sie betonen.
  • "Sperren" Sie die Bereitstellungspipeline nach Bedarf: Wenn ein Feature-Zweig in der Produktion bereitgestellt oder überprüft wird, kann niemand anderes eine Bereitstellung starten.
  • Stellen Sie sicher, dass jeder bereitgestellte Zweig alle bereits bereitgestellten Änderungssätze enthält. Wie das gemacht wird, ist etwas komplizierter. Hier ist was sie sagen:

Wir verwenden die GitHub-API, um diese Anforderung zu überprüfen. Ein Endpunkt in der Anwendung github.com macht den SHA1 verfügbar, der derzeit in der Produktion ausgeführt wird. Wir senden dies an die GitHub-Vergleichs-API, um die "Zusammenführungsbasis" oder den gemeinsamen Vorfahren von Master und Produktions-SHA1 zu erhalten. Wir können dies dann mit dem Zweig vergleichen, den wir bereitstellen möchten, um zu überprüfen, ob der Zweig eingeholt ist. Durch die Verwendung des gemeinsamen Vorfahren von Master und Produktion kann Code, der nur in einem Zweig vorhanden ist, aus der Produktion entfernt werden, und Änderungen, die auf dem Master gelandet sind, aber noch nicht bereitgestellt wurden, erfordern keine Zusammenführung von Zweigen vor der Bereitstellung.

Wenn sich herausstellt, dass der Zweig dahinter liegt, wird der Master automatisch in ihn eingefügt. Wir tun dies mit der neuen „ Zusammenführungs-API“ , die wir heute zur Verfügung stellen. Diese Zusammenführung startet einen neuen CI-Build wie jedes andere Push-Ereignis, das eine Bereitstellung startet, wenn es erfolgreich ist.

Die Zusammenführungs-API führt grundsätzlich eine Standardzusammenführung durch - jedoch serverseitig.

Ihre Lösung muss wahrscheinlich nicht so ausgefeilt sein. Letztendlich brauchen Sie nur eine angemessene Sicherheit, dass:

  • Tests bestehen
  • Es wird jeweils nur eine Person bereitgestellt
  • Der Master wird vor der Bereitstellung in Feature-Zweige zusammengeführt
svidgen
quelle
Mein Team entschied sich für die Zusammenführung zum Master, bevor es für die Produktion bereitgestellt wurde. Kein Zweig wird mit dem Master zusammengeführt, es sei denn, er basiert auf dem Master. Nach dem Zusammenführen müssen alle anderen nicht zusammengeführten Zweige (noch laufende Funktionen) erneut auf den Master übertragen werden, bevor sie zur Codeüberprüfung, zum Testen (manuell und per Skript) und schließlich zum Zusammenführen zum Master berechtigt sind. Sobald sich ein Feature im Master befindet, ist es wie im Produkt, da der Master jederzeit bereitgestellt werden kann.
DarkSigma
Es scheint einfach eine so schlechte Idee zu sein, eine Anwendung für die Produktion bereitzustellen, die nicht mit dem Hauptzweig zusammengeführt wurde. Sie würden denken, wenn Sie es in die Produktion verschieben, haben Sie die Änderung bereits in einer Testumgebung getestet. Wenn es dann in Prod fehlschlägt, kehren Sie einfach zur vorherigen Version zurück. Ich bin mir sicher, dass Github ihre Gründe hat, aber es scheint viel zusätzliche Arbeit zu sein und könnte zu einer Situation führen, in der Sie keine Ahnung haben, was tatsächlich in der Produktion ist. Zusammenführungen mit dem Master funktionieren bei Konflikten nicht immer gut, sodass Sie möglicherweise Code in Prod haben, der nicht
Erik Pearson
@ErikPearson Ich denke, die Idee ist, dass Sie mindestens den Master zuerst in den Feature-Zweig einbinden müssen. Ihr Build-System sollte es Ihnen nicht ermöglichen, einen nicht zusammenlegbaren Zweig bereitzustellen. ... natürlich spekulieren. Ich benutze diesen Workflow eigentlich nicht. Aber mit den richtigen Werkzeugen erscheint es mir nicht schrecklich .
Svidgen
0

Ist Ihnen dieses Problem passiert oder handelt es sich um eine theoretische Frage?

Git ist beim Zusammenführen "klug genug", um nur den geänderten Code zu pushen. Wenn es "Probleme" gibt, kommt es zu einem Zusammenführungskonflikt.

Jedes neue Feature basiert auf dem Entwicklungszweig, bei dem Features nicht auf anderen Features basieren.

Eine Sache, die wir tun, um Zusammenführungskonflikte zu minimieren, besteht darin, häufig zusammenzuführen und vor dem Start einer Funktion immer die neueste Entwicklung abzurufen. (Wir verpflichten uns nie zum Master, sondern immer zu einem Entwicklungszweig, der ab und zu mit dem Master-Zweig zusammengeführt wird.)

Pieter B.
quelle
2
Sie verstehen meine Frage falsch. Es geht nicht um Zusammenführungskonflikte, und es gibt keinen Entwicklungszweig. Ich frage nach Git Hub Flow (siehe Link). Mein Team möchte diesen Workflow verwenden, versteht jedoch nicht, warum wir eine nicht zusammengeführte Funktion bereitstellen würden. Dies scheint jedoch eine Innovation dieses Flusses zu sein
DarkSigma
Es gibt immer einen Entwicklungszweig. Anscheinend nennen Sie Ihren Entwicklungszweig "Master".
Gnasher729