Pull 请求是 Github 和 Gitlab 等在线 git 服务的一项功能。 它们允许任何人请求添加更改,即使他们无权访问存储库。 我们将讨论它们如何工作,以及如何使用它们进行开源协作。
拉取请求有什么作用?
不管看起来如何,
git
作为一种工具,Github 是一个完全去中心化的系统。这意味着 Github.com 上的存储库和您本地计算机上的存储库没有任何区别。您无需连接到 Github 即可处理存储库,只需将代码从 Github 复制到本地存储库,然后在那里处理。
当您想要推送更改时,您可以提交并运行
git push
,将更新发送到给定的“远程”,该“远程”可以是任何其他 Git 存储库,但通常是在线托管服务,例如 Github、Bitbucket 或 Gitlab。 这会将远程存储库更新为与您的存储库同步。
但是,这仅在您有推送提交的权限时才有效,通常使用密码或 SSH 密钥进行配置。这只提供给控制存储库的组织成员,否则,每个人都可以更改 Git 历史记录。如果您不是该组织的成员,当您想要进行更改时该怎么办?
好吧,还有第二种更新 Git 存储库的方法——
git pull
每当您的同事做出更改并推送时,您可能都会经常这样做。在这种情况下,您会从远程存储库中拉取提交,并将其与本地存储库同步。
但是,Git 是去中心化的,所以你的仓库和远程仓库之间实际上没有区别。你可以运行
git pull
相反,来自服务器,这就是拉取请求发挥作用的核心。
拉取请求只是告诉远程服务器(以及维护它的人员)您有一些更新的提交,您希望他们查看并与远程存储库集成。 如果他们接受更改,远程存储库将运行
git pull
针对您的本地存储库,集成代码,而无需授权 SSH 密钥。
开源协作的支柱
开源库经常使用拉取请求。毕竟,开源的很大一部分原因是,任何开发人员都可以为项目做出贡献,只要他们的代码有用。
拉取请求是实现这一目标的关键。项目的维护者,即控制该项目的管理员,通常负责审查拉取请求并决定是否集成代码,或者在准备就绪之前是否需要修复某些错误。
拉取请求并不完全是
git
本身,因此它们的具体实现将根据服务的不同而有所不同。 但是,对于 Github,您可以在存储库的菜单栏中找到拉取请求,其中显示了可以过滤的打开和关闭的请求列表。
如果单击其中任何一个,您可以查看请求者所做的评论以及与之相关的提交。
如果您是存储库的维护者,您可以查看并合并请求。或者,如果您遇到需要讨论的问题,您可以发表评论并一起处理代码。这就是为什么 Github 等公共空间非常适合开源协作的一个重要原因,即使是像更改文档措辞这样简单的事情也可以由任何人协作完成。
拉取请求与问题不同。 问题跟踪是 Github 等许多服务的一项功能,可以轻松修复错误并为新功能进行公共协作。 本质上,每个问题都有一个可以由维护者和社区讨论的主题。 例如,
dotnet/csharplang
是讨论 C# 作为编程语言的设计方式的官方仓库。如果你查看这些问题,你会发现很多人在讨论该语言未来迭代的概念:
并非所有问题都会导致拉取请求。 如果维护者解决了这个问题,那就没关系了。 如果问题由协作者解决,他们将需要提交拉取请求。
所有拉取请求要么被拒绝,要么直接导致存储库中的代码更改。问题只是一种跟踪开发进度和需要修复哪些错误的方法。
发出拉取请求
同样,具体步骤将根据您所使用的服务而有所不同,但大多数开源协作都在 Github 上进行,因此我们将展示相关步骤。
转到您要发出请求的存储库,然后单击“拉取请求”选项卡下的“新拉取请求”:
这里有两个选项。如果您是存储库的成员,并且想要将您的功能分支合并到主分支,则可以选择这两个分支。
如果您正在开发开源存储库,则需要分叉该存储库,并将其推送到您自己的帐户下的 Github。 然后,您可以选择“跨分支比较”将您的主分支合并到其主分支中。
完成后,拉取请求将开放供讨论,您只需等待维护人员的回复即可。
同时,您可以通过主标题栏中的“拉取请求”选项卡检查您参与的所有拉取请求的状态。