拉取请求的生命周期#
如前所述,Arrow 项目使用 Git 进行版本控制,并使用基于拉取请求的工作流程。这意味着您通过在 Git 中创建一个分支来贡献代码更改或“补丁”,对代码进行更改,将更改推送到您的 origin
(这是您在 GitHub 上的 Arrow 存储库的分支),然后您创建一个针对官方 Arrow 存储库的 **拉取请求**,该存储库在您的设置中保存为 upstream
。
您现在应该已经设置了 Git,克隆了存储库,成功构建了 Arrow,并拥有一个要处理的 GitHub 问题。
在更改代码之前,您应该在 Git 中创建一个新分支。
使用
upstream/main
更新您分支的 main 分支。从arrow
目录中的 shell 中运行此命令。$ git checkout main # select the main Arrow branch $ git fetch upstream # check for changes in upstream/main $ git pull --ff-only upstream main # save the changes from upstream/main
注意:
--ff-only
仅在更改可以快速转发且没有冲突或创建合并提交时应用更改。创建一个新分支
$ git checkout -b <branch-name>
或(执行相同操作)
$ git switch --create <branch-name>
现在您可以对代码进行更改。要查看库中所做的更改,请使用以下两个命令
$ git status # to see what files are changed
$ git diff # to see code change per file
创建拉取请求#
对更改感到满意后,运行 测试 和 代码风格检查器,然后继续提交更改。
添加并提交更改
$ git add <filenames> $ git commit -m "<message>"
或者,您可以在一步中添加并提交,如果所有更改的文件都要提交(-a 用于添加所有文件,-m 用于消息)
$ git commit -am "<message>"
然后将您的工作推送到您的 Arrow 分支
$ git push origin <branch-name>
注意
您的工作现在仍然在您的掌控之中,因此如果您看到任何想要更正的错误,这不成问题。您可以进行额外的提交进行更正,而 Git 有许多方法来修补、删除、修改等。有关更多信息,请参见 https://git.js.cn/docs。
在您发出拉取请求之前,在 Arrow 存储库中看不到任何内容,您可以自由地进行实验。
如果一切就绪,您可以发出拉取请求!
转到
https://github.com/<your username>/arrow
,您将在那里看到一个包含您推送的分支名称的框,旁边有一个绿色按钮 **比较并拉取请求**。单击它后,您应该添加拉取请求的标题和描述。在下方,您可以再次检查您所做的更改。另请参阅
在 Arrow 存储库中获取有关命名拉取请求的更多详细信息以及其他附加信息 拉取请求和审阅 部分。
持续集成 (CI)#
持续集成 (CI) 是一种自动化的方式,可以在不同的环境中运行测试和构建,这些环境使用特定拉取请求所做的代码更改。在代码被合并或集成到项目的 main 存储库之前,它充当稳定性检查。
创建拉取请求后,CI 将触发对代码的检查。根据更改了代码的哪个部分(例如文档、C++ 或其他语言),CI 被配置为运行相关的检查。
您将在 GitHub 上拉取请求页面底部看到正在运行的检查。如果出现错误,请单击详细信息并研究构建失败的原因。
除了检查 GitHub 存储库中更改的 CI 作业(打开或合并拉取请求)外,我们还使用 CI 进行 Apache Arrow 库的夜间构建和发布。
此外,扩展触发作业可用于您的拉取请求,例如添加包含 @github-actions crossbow submit python
的注释将通过 GitHub 操作运行 PyArrow 测试。这些主要用于在不太常见的环境中运行测试,通常在首次贡献中不需要这些测试。
要详细了解此主题,请访问 持续集成。
拉取请求的审阅和合并#
提交拉取请求后,它将等待审阅。开源的一大优势是您的工作可以获得很多反馈,从而得到完善。不要因为 PR 由于审阅和更正而花费的时间过长而灰心丧气。这是一个支持质量的过程,您可以从中学习很多东西。
如果仍然需要很长时间才能合并,请不要犹豫,在拉取请求的评论部分提醒维护人员,并在 GitHub 问题中发布提醒。
如何让您的拉取请求得到审阅?#
创建拉取请求后,Arrow 维护人员会收到通知,他们会尽快进行处理。如果几天过去了,但仍然没有得到审阅,请继续提及 GitHub 问题的报告者或您通过邮件列表或 GitHub 联系的开发人员。
要在 GitHub 中添加 **提及**,请在评论中插入 @,然后从列表中选择用户名。
在拉取请求上评论#
当存储库中打开拉取请求时,您和其他开发人员可以在提出的解决方案上评论。
要创建一般评论,请导航到拉取请求的 **对话** 选项卡,然后在页面底部的评论框中开始编写。
您还可以对文件中的某个部分进行评论,以指出您代码中的特定内容。为此,请导航到 **更改的文件** 选项卡,然后选择要插入评论的行。将鼠标悬停在行的开头,您将看到一个 **蓝色的加号图标**。您可以单击它或拖动它以选择多行,然后单击图标插入评论。
解决对话#
您可以在拉取请求审阅中通过单击 **更改的文件** 选项卡中的 **解决对话** 来解决对话。这样,对话将被折叠并标记为已解决,这将使您更容易组织已完成的工作和仍需解决的问题。
更新您的拉取请求#
获得审阅后的流程与创建初始拉取请求类似。您需要在本地更新您的代码,进行提交,更新分支以与上游同步,并将您的代码推送到 origin。它也会自动更新到您的拉取请求中。
更新拉取请求的步骤如下:
与之前一样,在本地更新代码并进行提交
$ git commit -am "<message>" #if all changed files are to be committed
**重要!** 如果拉取请求分支上有来自其他开发人员的提交,或者您提交了来自 GitHub 的建议,则在变基之前需要使用
origin
更新您的代码!为此,请运行$ git pull origin <branch-name>
在这里,我们将新的提交与我们的本地分支合并,我们不会进行变基。
现在,我们必须更新分支以与上游 main Arrow 分支同步。这样,拉取请求将能够被合并。在这种情况下,我们使用变基。
$ git pull upstream main --rebase
这将把您本地的提交变基到
upstream/main
的顶端。现在您可以通过运行以下命令来推送更改
$ git push origin <branch-name> --force
关于强制推送到正在审阅的分支的说明: 如果您希望审阅者查看您的更新,请确保您在 GitHub 上对 PR 进行评论,因为仅仅强制推送不会在 GitHub 用户界面中触发通知。
另请参阅
有关更新分支的更多信息(我们使用 rebase
,而不是 merge
)以及压缩本地提交的信息,请参见 本地 Git 约定。
如果审阅过程成功,您的拉取请求将被合并。