PullRequest

2021年1月28日

Pull request是github推广的一种机制,用于帮助促进工作的合并,特别是在开源项目的背景下。贡献者在中央存储库的一个分支(克隆)中工作。一旦他们的贡献完成,他们就会创建一个拉请求,通知中央存储库的所有者,他们的工作已经准备好合并到主线中。工具支持并鼓励在接受请求之前对贡献进行代码审查。Pull请求在软件开发中得到了广泛的应用,但是批评人士担心增加的集成摩擦会阻碍持续188比分直播完整手机版集成。

拉出请求基本上为在许多开源项目中存在的开发工作流程提供方便的工具,特别是使用分布式源控制系统(例如Git)的开发工作流程。此工作流程从创建新逻辑分支的贡献者开始,通过在中央存储库中启动新分支,克隆到个人存储库或两者。然后,贡献者在该分支上工作,通常是符合A的风格特性分支,从主线到他们的分支。当它们完成时,它们与中央存储库的维护者进行通信,表明它们完成了,并引用了它们的提交。这个引用可以是需要集成的分支的URL,或者是电子邮件中的一组补丁。

一旦维护人员得到消息,她就可以检查提交,以决定它们是否准备好进入主线。如果没有,她可以向贡献者提出修改建议,然后贡献者就有机会调整他们的提交。一旦一切就绪,维护人员就可以进行合并,可以使用常规的合并/重基,也可以应用最终电子邮件中的补丁。

Github的pull request机制使得这个流程更容易。它通过fork机制跟踪克隆,并自动创建一个消息线程来讨论pull请求,以及处理审查工作流中的各个步骤的行为。这些便利是github成功的主要原因,并导致“pull request”成为开发人员的基本词汇。

这就是pull request的工作方式,但我们应该使用它们吗?如果需要,又该如何使用呢?为了回答这个问题,我想先从机制退一步,想一想它在源代码管理工作流的上下文中是如何工作的。为了帮助我思考这个问题,我写下了一系列用于管理源代码分支的模式.我发现理解这些模式(特别是基本模式和集成模式)澄清了拉请求的作用。

就这些模式而言,拉请求是一种旨在实现组合的机制特性分支整合前评论.因此,为了评估拉出请求的有用性,我们首先需要考虑如何适用这些模式是我们的情况。与大多数模式一样,它们有时是有价值的,有时颈部有疼痛 - 我们必须根据我们的具体背景来检查它们。特征分支是一种良好的逻辑贡献方式,使其可以被评估,接受或推迟作为单个单元。当贡献者不信任直接到主线时,这会产生很多意义。但是,功能分支以成本为付,这通常限制集成频率,导致复杂合并和威慑重构。188app彩票ios预融合审查提供了一个明确的地方,以代码审查的成本综合摩擦力增加。[1]

这是一个激烈的总结情况(我需要更多的词汇来进一步解释这个特性分支文章),但它可以归结为这些模式的价值,从而把请求的值,其他主要社会结构的团队。有些团队会更好地使用拉请求,有些团队会发现拉请求严重影响效率。我怀疑,由于pull请求如此流行,很多团队在没有它的情况下会做得更好时,却默认使用了pull请求。

虽然pull请求是为Feature Branches构建的,但是团队可以在持续集成环境。要做到这一点,他们需要确保拉请求足够小,团队响应足够快,以遵循每个人都遵循的CI经验法则主流的集成每天至少。(我应该提醒大家,主线集成不仅仅是将当前的主线合并到特性分支中)。

pull请求的广泛使用鼓励了代码审查的广泛使用,因为pull请求为Pre-Integration review提供了一个明确的点,以及鼓励它的工具。代码审查是一件好事,但我们必须记住,pull request并不是我们可以使用的唯一机制。许多团队发现了很大的价值连续的评论通过配对编程提供。为避免减少融合,我们可以通过多种方式进行整合后代码审查。正式的过程可以为每个提交记录审查,或者技术领导可以检查每几天风险的风险。也许是最强大的代码审查形式是经常被忽视的形式。一个团队,将Codebase是流体系统的态度,一个可以通过重复迭代进行稳定地精制的态度优化代码评审每当开发人员查看现有代码时。我经常听到人们说拉请求是必要的,因为没有它们你就不能进行代码审查——那是垃圾。预集成代码审查只是进行代码审查的一种方式,对于许多团队来说,这并不是最好的选择。

确认

Chris Ford, Dan Mutton, Jeremy Huiskamp, Kief Morris, Pramod Sadalage和Ryan Boucher在我们的内部邮件列表上评论了这篇文章的草稿。

笔记

1:我的一个同事最近计算了一个客户等待没有评论的拉请求的时间(其中91%是真的)。2020年,7000名PRs的总等待时间为13万小时。这个数字包括了晚上和周末的时间。