Sind abhängige Pull-Anfragen in Github möglich?

71

Derzeit arbeite ich an einer wirklich großen Pull-Anfrage. Um Code-Reviews irgendwie überschaubar zu halten, bestand die Idee darin, die gesamte Pull-Anfrage in isolierte Teile aufzuteilen, die jedoch voneinander abhängen.

Ein Beispiel wäre:

  • Pull-Anforderung 1 : Schnittstellen erstellen: Schnittstelle A & B und Code umstrukturieren
  • Pull-Anforderung 2 : Implementierung von Schnittstelle A und Tests (abhängig von Pull-Anforderung1)
  • Pull-Anforderung 3 : Implementierung und Tests von Schnittstelle B (abhängig von Pull-Anforderung2)
  • Pull-Anforderung 4 : Gemischter Test der Implementierungen (abhängig von 2 + 3)

Gibt es in Github eine Möglichkeit, alle vier Pull-Anforderungen gleichzeitig mit Abhängigkeiten abzulegen?

fyr
quelle
1
Normalerweise verweise ich nur auf die Abhängigkeit, dann werden die PRs verknüpft und die Prüfer werden es wissen. PR hinzufügen 1. Fügen Sie PR 2 hinzu, verwenden Sie den PR 1-Zweig als Basis und erwähnen Sie "dies hängt von # 1 ab". Und so weiter. Es ist nicht nötig, sie alle gleichzeitig einzulegen.
Schwern

Antworten:

69

Soweit ich sehen kann, ist dies unmöglich und meiner Meinung nach ist es einer der Hauptnachteile von GitHub im Vergleich zu anderen Tools zur Codeüberprüfung. Gerrit richtet automatisch abhängige Codeüberprüfungen ein, wenn Sie voneinander abhängige Commits ausführen. In Phabricator ist dies eher schmerzhaft, aber dennoch möglich.

Es ist auch gut zu bedenken, dass es mehrere Möglichkeiten gibt, wie GitHub-PRs verwendet werden. Die normale Open-Source-Kollaborationsmethode besteht darin, ein Repo zu teilen und eine repoübergreifende Pull-Anfrage zu senden. In anderen Fällen (z. B. innerhalb einer Organisation) können Sie Pull-Anfragen für Diffs alle innerhalb desselben Repositorys senden. Ich denke, innerhalb eines einzelnen Repositorys ist es vernünftiger, etwas in Richtung abhängiger Pull-Anfragen zu bekommen, da Sie die Commit / Branch-Struktur innerhalb dieses Repos einrichten können.

In diesem Blog-Beitrag wird beschrieben, wie Sie einige Vorteile von abhängigen Pull-Anforderungen nutzen können. Ich denke, dass alle Commits im selben Repo sein müssen: http://graysonkoonce.com/stacked-pull-requests-keeping-github-diffs-small /.

Eine Zusammenfassung:

  • Um 5 abhängige Pull-Anforderungen zu senden, erstellen Sie eine 5-Ebenen-tiefe Zweighierarchie und senden Sie jeden PR als diesen Zweig basierend auf dem vorherigen Zweig.
  • Um die Überprüfung 2 von 5 zu aktualisieren, drücken Sie eine Aktualisierung auf Zweig 2 und führen Sie dann 3 Zusammenführungsvorgänge aus, um die Änderungen in die Überprüfungen 3, 4 und 5 zu integrieren.
  • Sie müssen alle Änderungen auf einmal landen, da GitHub die Aktualisierung des Zielzweigs von PRs nicht unterstützt. Im Beispiel wurden alle 5 Codeüberprüfungen als ein einziges Commit gelandet. GitHub unterstützt jetzt die Aktualisierung des Basiszweigs eines PR, sodass die PRs einzeln gelandet werden können.

Dieser Ansatz scheint für riesige Änderungen in Ordnung zu sein, die am besten in kleineren Teilen überprüft werden können (obwohl das Beibehalten einer n-Ebenen-tiefen Verzweigungshierarchie im Vergleich zu so etwas ein Problem ist git rebase -i), aber es erlaubt nicht wirklich eine "Codeüberprüfungs-Pipeline". Hier können Sie abhängige Unterschiede in verschiedenen Überprüfungsstufen haben und frühere Unterschiede bei der Überprüfung landen.

Einige andere Internetquellen, die ebenfalls die Einschränkung hervorrufen:

https://www.quora.com/Is-there-a-good-system-for-adding-multiple-pull-requests-to-GitHub

https://muffinresearch.co.uk/how-do-you-deal-with-dependent-branches-on-github/

Nach meinem Verständnis versuchen Benutzer von GitHub-PRs im Allgemeinen nur, ihren Workflow so zu strukturieren, dass sie sich nicht auf abhängige Codeüberprüfungen verlassen. Einige Beispiele:

  • Anstatt eine Änderung in unabhängig überprüfbare inkrementelle Schritte aufzuteilen, reichen Sie sie als monolithische Codeüberprüfung ein, die auf einmal landet. Mit GitHub können Sie Codeüberprüfungen weiterhin in mehrere Commits aufteilen, die der Prüfer anzeigen kann, die jedoch nicht unabhängig genehmigt / gelandet werden können.
  • Versuchen Sie, Ihre Arbeit so zu strukturieren, dass Sie Änderungen an nicht verwandten Teilen des Codes vornehmen und diese in unabhängige Zweige stellen, mit denen Sie unabhängige PRs einreichen können. Sie können weiterhin eine lokale Niederlassung behalten, in der alle Änderungen mithilfe von Kirschernte oder anderen Ansätzen vorgenommen werden.
  • Wenn Sie eine Änderung haben, die von einer ausstehenden PR abhängt, warten Sie einfach, bis die PR akzeptiert und zusammengeführt wurde, bevor Sie die neue PR einreichen. Sie könnten irgendwo erwähnen, dass Sie eine andere PR haben, die von dieser abhängt, und vielleicht motiviert dies den Code-Prüfer, früher zu dieser zu gelangen.
Alan Pierce
quelle
Unter wchargin.github.io/posts/managing-dependent-pull-requests finden Sie auch interessante Informationen zur Behandlung abhängiger Pull-Anforderungen.
Larsks
Nachteil von GitHub: Auf jeden Fall! Es gibt ein Wort dafür, dass andere Aspekte zuerst behoben oder implementiert werden müssen - Vorarbeiten . Das Aufteilen von Vorarbeiten ist wohl Teil der ordnungsgemäßen Ausführung von Commits und die Norm, keine Ausnahme, wie GitHub (und GitLab) glauben.
user2394284
Übrigens ist diese Art von möglich. Angenommen, PR B hängt von PR A ab, sodass A zusammengeführt werden muss, bevor B dies kann. Sie können alle Arbeiten auf B auf dem Zweig basieren, den A verwendet hat. Wenn nun A zusammengeführt und Zweig A gelöscht wird, zeigt B jetzt auf Master (anstelle von A). Hier: github.com/isaacs/github/issues/959#issuecomment-642838613
Levi Lesches