Code Review mit Git-Flow und Github

43

Mit normalem Git und Github kann ich eine Codeüberprüfung durchführen, indem ich einfach eine Pull-Anfrage des Feature-Zweigs, an dem ich arbeite, an den Master-Zweig erstelle. Wie würde ich Code-Reviews mit Git-Flow durchführen? Bei einem Workflow wie "Fertigstellen von Git-Flow-Funktionen" bin ich verwirrt, wo die Codeüberprüfung tatsächlich stattfindet und wie Git-Flow oder Git diese Überprüfung erleichtern können.

AdamT
quelle
Sie können sich mit gerrit befassen, obwohl ich nicht sicher bin, wie es sich gut in git-flow integrieren lässt. Wie sieht Ihr Team- Workflow aus ?
OnesimusUnbound

Antworten:

29

Wir sind kürzlich auf genau dieses Problem gestoßen. Wir mögen Git Flow sehr, da es eine gute Ebene der Semantik verwendet (mit der gleichen Ebene, die Sie in der Teamdiskussion verwenden: "Ich beginne Feature A" mehr als "Ich erstelle einen Zweig, checke es aus"), während git ist sehr "Implementierungs" -Stufe (was auch gut und nützlich ist, aber anders).

Das Problem, das wir haben, besteht darin git feature finish, dass die Verzweigung in die Entwicklung eingebunden wird, während eine Pull-Anfrage gesendet und (dies ist wichtig) vom Prüfer und nicht vom Committer zusammengeführt werden soll, um die Teamverantwortung zu betonen.

Unsere aktuelle Lösung:

  1. Jemand verwendet git flow, um einen Feature-Zweig zu erstellen
  2. Wenn fertig, erstellt er eine Pull-Anfrage (mit Github)
  3. Die Überprüfung erfolgt mit potenziellen zusätzlichen Verpflichtungen
  4. Die Pull-Anfrage wird vom Reviewer mit GitHub zusammengeführt .
  5. Es gibt kein Ende des Git-Flow-Features (da der Zweig bereits zusammengeführt ist)

Dies steht im Einklang mit unserer Praxis, mit dem Nachteil, dass wir den Zweig selbst löschen müssen (da wir nicht mit flow finish arbeiten). Unser nächster Schritt wird wahrscheinlich darin bestehen, einige Teile des Git-Flows neu zu implementieren (da es hauptsächlich um das Verketten von Git-Befehlen geht), um dies zu berücksichtigen (wobei der "Reinigungsteil" des Finishs ohne Zusammenführung erfolgt).

Martin
quelle
3
Wie wäre es mit einem Release-Zweig? Was passiert mit den Tags?
E-Riddie
16

Der Prozess, den das Team, mit dem ich arbeite, dafür verwendet, ist wie folgt:

  1. Erstellen Sie einen Feature-Zweig: git flow feature start module_1
  2. Der Code wird im Feature-Zweig aktualisiert
  3. Wenn Änderungen festgeschrieben werden, werden sie an GitHub weitergeleitet (oder, falls gewünscht, einmal am Ende).
  4. Wenn das Feature abgeschlossen ist, wird in GitHub compare developund dem Feature-Zweig eine Pull-Anfrage geöffnetmodule_1
  5. Das Team überprüft die Pull-Anfrage und macht Kommentare
  6. Alle Änderungen von der Pull-Anforderung werden an der Feature-Verzweigung vorgenommen
  7. Sobald alle Änderungen in den Feature-Zweig übernommen wurden, ist der Feature-Zweig fertig: git flow feature finish module_1
  8. Die developVerzweigung wird an GitHub weitergeleitet (GitHub markiert die Pull-Anforderung in diesem Fall automatisch als geschlossen / zusammengeführt).

Normalerweise wird der gesamte Vorgang vom ursprünglichen Autor ausgeführt, dies ist jedoch nicht erforderlich. Jeder in unserem Team kann jederzeit in diesen Prozess einsteigen und ihn in Angriff nehmen. Sie müssen lediglich den Feature-Zweig auschecken und mit dem Vorgang fortfahren. Wer immer läuft git flow feature finish module_1, hat den Luxus, dass seine lokale Feature-Verzweigung gelöscht wird, aber jeder andere, der die Verzweigung ausgecheckt hat, muss dies manuell tun, wenn er etwas wie verwenden möchte git branch -D feature/module_1.

Für Hotfixes verwenden wir einen ähnlichen Ansatz und erstellen die Pull-Anforderung in GitHub, bevor wir den Hotfix fertigstellen.

brainimus
quelle
Danke für diese Antwort. Ich wusste nicht, dass GIT die PR nach einer Fusion als geschlossen markieren würde.
vicTROLLA
3

Wenn Sie Codeüberprüfungen durchführen, gehe ich davon aus, dass Sie ein zentrales Repository haben, das den "offiziellen" Code enthält. Entwickler ziehen aus diesem zentralen Repository und verschieben es in dieses.

Wenn Sie Gerrit verwenden , wird Gerrit selbst zum zentralen Repository (es verfügt über integrierte SSH- und HTTP-Server, mit denen Benutzer im Wesentlichen so interagieren können, wie sie es bereits sind). Bei Verwendung von Gerrit wird der Workflow zu:

  1. Der Entwickler nimmt Änderungen an jedem Zweig vor und schreibt diese lokal fest.
  2. Der Entwickler überträgt diese Änderungen an Gerrit.
  3. Gerrit erstellt Überprüfungsobjekte, die von anderen überprüft werden können.
  4. Peers überprüfen den Code, machen Kommentare und akzeptieren das Commit oder lehnen es ab.
  5. Wenn die Commit akzeptiert wird, dann macht Gerrit diejenigen , ändert sich für die anderen aus der Branche zu ziehen.

Wenn Sie ein zentrales Repository verwenden, können andere Entwickler die übermittelten Änderungen nach Schritt 2 sehen. Gerrit führt den Workflow für die Codeüberprüfung ein, sodass andere Entwickler die übermittelten Änderungen erst nach Schritt 5 sehen.

Dies funktioniert gut mit Git-Flow (oder einem anderen Verzweigungsschema), da Gerrit das Überprüfen von Änderungen unterstützt, die an einem Zweig vorgenommen wurden.

Greg Hewgill
quelle
3

Hier ist ein weiterer Vorschlag.

  1. Führen Sie den regulären Git-Flow-Prozess aus, um ein Feature zu erstellen , schließen Sie es jedoch nicht ab oder führen Sie es nicht zusammen.
  2. Erstellen Sie eine Pull-Anforderung , führen Sie sie jedoch nicht zusammen. Warten Sie, bis der Genehmigende einen Kommentar hinterlassen hat. Der Kommentar ist das Gütezeichen.
  3. Mach das Git Flow Finish . (Dies kann entweder vom Genehmigenden oder vom Entwickler durchgeführt werden, je nachdem, was das Team vereinbart hat.) Die Pull-Anforderung wird auf Github als zusammengeführt markiert. Sie müssen den Zweig nach Ursprung noch löschen.
Peet Brits
quelle