git - Github 中的依赖 pull 请求是否可行?

标签 git github pull-request

目前我正在处理一个非常大的 pull 请求。为了以某种方式保持代码审查的可管理性,我们的想法是将完整的 pull 请求拆分为独立的部分,但这些部分相互依赖。

一个例子是:

  • pull 请求 1:创建接口(interface):接口(interface) A 和 B 并重组代码
  • pull 请求 2:接口(interface) A 实现和测试(取决于 pull 请求 1)
  • pull 请求 3:接口(interface) B 实现和测试(取决于 pull 请求 2)
  • pull 请求 4:实现的混合测试(取决于 2 + 3)

Github 中有没有一种方法可以同时提交所有四个带有依赖项的 pull 请求?

最佳答案

2022 年更新:虽然 GitHub 仍然没有对依赖/堆叠 pull 请求的原生支持,但现在有一些工具可以更轻松地管理对 GitHub 友好的分支层次结构。我最喜欢的是ghstack ,它采用一堆提交并将每个提交变成它自己的分支,GitHub 可以在不丢失 PR 历史记录的情况下理解它。然后,您可以使用交互式 rebase 编辑、重新排序、拆分和删除提交,PR 将相应更新。


据我所知,这是不可能的,在我看来,与其他代码审查工具相比,这是 GitHub 的主要缺点之一。当您推送相互依赖的提交时,Gerrit 会自动设置依赖代码审查,而在 Phabricator 中,这更痛苦,但仍然有可能。

同样要记住,人们使用 GitHub PR 的方式有多种。正常的开源协作方式是 fork 一个存储库并提交一个跨存储库的 pull 请求,但在其他情况下(例如在一个组织内),您可能会在同一存储库中提交所有差异的 pull 请求。我认为在单个存储库中,按照依赖 pull 请求的方式获得一些东西更合理,因为您可以在该存储库中设置提交/分支结构。

这是一篇描述如何获得依赖 pull 请求的一些优势的博客文章,我认为这需要所有提交都在同一个 repo 中: http://graysonkoonce.com/stacked-pull-requests-keeping-github-diffs-small/

总结:

  • 要提交 5 个相关的 pull 请求,请创建一个 5 级深的分支层次结构,并根据前一个分支将每个 PR 作为该分支提交。
  • 要更新评论 2(共 5 条),将更新推送到分支 2,然后执行 3 次 merge 操作以将更改整合到评论 3、4 和 5 中。
  • 您需要一次完成所有更改,因为 GitHub 不支持更新 PR 的目标分支。在示例中,所有 5 次代码审查都作为单个提交登陆。GitHub 现在支持更新 PR 的基础分支,因此 PR 可以一次登陆一个。

这种方法似乎适用于最好以较小的部分进行审查的巨大更改(尽管与 git rebase -i 之类的东西相比,维护一个 n 级深的分支层次结构是一件痛苦的事情),但它并没有真正允许“代码审查管道”,您可以在审查的不同阶段有依赖差异,并且可以在审查时更早地登陆。

其他一些似乎也指出了限制的互联网资源:

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/

我的理解是,使用 GitHub PR 的人通常只是尝试构建他们的工作流程,而不依赖于依赖代码审查。一些例子:

  • 与其将更改分解为可独立审查的增量步骤,不如将其作为一次全部完成的整体代码审查提交。 GitHub 仍然允许您将代码审查分成审查者可以查看的多个提交,但它们不能被独立批准/登陆。
  • 尝试构建您的工作,以便在代码的不相关部分进行更改,并将它们放在您可以用来提交独立 PR 的独立分支上。您仍然可以保留一个本地分支,并使用精选或其他方法应用所有更改。
  • 如果您的更改依赖于未完成的 PR,只需等待 PR 被接受并 merge ,然后再提交新的 PR。你可以在某个地方提到你有另一个 PR 依赖于那个 PR,也许这会激励代码审查者更早地到达那个 PR。

关于git - Github 中的依赖 pull 请求是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26619478/

相关文章:

git - 如何在 Git 存储库中移动现有的 Git 子模块?

GitHub GraphQL 查询未返回上次提交

Github:推送 pull 请求

jira - 如何获取分支/拉取请求的 JIRA 问题?

git - 强制执行代码审查并保持集成分支原始状态的工作流(git、Stash、TeamCity)

git - Git 中的自动超链接 Jira 问题在 SourceTree 中提交

CICD 的 Git 分支策略

github - Github 上 Pull Requests 的多个模板

git - 它的命令中的 git 点符号是更通用的东西的一部分吗?

git - 将 GitHub 与另一个 Bug-tracker 一起使用?