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.