目前我正在处理一个非常大的拉取请求。为了使代码审查变得更加可管理,我们的想法是将完整的拉取请求拆分成相互依赖的独立部分。
例如:
- 拉取请求1:创建接口:接口A和B并重构代码。
- 拉取请求2:接口A实现和测试(依赖于拉取请求1)。
- 拉取请求3:接口B实现和测试(依赖于拉取请求2)。
- 拉取请求4:混合实现的测试(依赖于2+3)。
在GitHub中是否有一种方法可以同时提交这四个拉取请求并反映它们之间的依赖关系?
目前我正在处理一个非常大的拉取请求。为了使代码审查变得更加可管理,我们的想法是将完整的拉取请求拆分成相互依赖的独立部分。
例如:
在GitHub中是否有一种方法可以同时提交这四个拉取请求并反映它们之间的依赖关系?
据我所知,这是不可能的,在我的观点中,这是GitHub与其他代码审查工具相比的主要缺点之一。当您推送相互依赖的提交时,Gerrit会自动设置相关的代码审查,而在Phabricator中,虽然可能更麻烦,但仍然是可以实现的。
还需要记住的是,人们使用GitHub PRs的方式有多种。正常的开源协作方式是派生一个repo并提交跨repo pull请求,但在其他情况下(例如在组织内),您可能会为在同一存储库中的所有差异提交pull请求。我认为在单个存储库中,获取类似于依赖拉取请求的东西更为合理,因为您可以在该存储库中设置提交/分支结构。
以下是一篇博客文章,介绍了如何获得一些依赖拉取请求的优点,我认为这需要所有提交都在同一个repo中: http://graysonkoonce.com/stacked-pull-requests-keeping-github-diffs-small/
总结如下:
这种方法似乎适用于最好以较小的部分进行审核的大型更改(尽管与像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,并且它们之间会有一些链接,但这只是它们之间的链接,没有真正的依赖关系。
我选择不使用dependencies-action。该操作基于PR的开放评论来保证依赖关系。如果操作成功,PR将可以合并;否则,它将失败并阻止合并。
为了使用这个工作流程,你只需要在.github/workflows
中添加以下yaml
文件
on: [pull_request]
jobs:
check_dependencies:
runs-on: ubuntu-latest
name: Check Dependencies
steps:
- uses: gregsdennis/dependencies-action@1.3.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
依赖于[PR1](链接到您的PR1)
对于PR3:添加:依赖于[PR2](链接到您的PR2)
对于PR4:添加:依赖于[PR2](链接到您的PR2)
- 依赖于[PR3](链接到您的PR3)
这样,您可以根据PR中的单个评论明确声明依赖关系。这也适用于问题 ;)