拉取请求的生命周期#
如前所述,Arrow 项目使用 Git 进行版本控制,并使用基于拉取请求的工作流程。这意味着您通过在 Git 中创建一个分支来贡献代码更改或“补丁”,对代码进行更改,将更改推送到您的 origin
(这是您在 GitHub 上的 Arrow 仓库的分支),然后针对官方 Arrow 仓库(在您的设置中保存为 upstream
)创建一个**拉取请求**。
您现在应该已经设置好了 Git,克隆了仓库,成功构建了 Arrow,并且有一个 GitHub issue 可以处理。
在对代码进行更改之前,您应该在 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-scm.cn/docs。
在您发出拉取请求之前,Arrow 仓库中没有任何内容可见,您可以随意进行实验。
如果一切就绪,您可以发出拉取请求!
转到
https://github.com/<您的用户名>/arrow
,您将看到一个框,其中包含您推送的分支的名称,旁边有一个绿色按钮**比较并创建拉取请求**。单击它后,您应该添加拉取请求的标题和描述。在下方,您可以再次检查您所做的更改。另请参阅
在 Arrow 仓库中命名拉取请求的更多详细信息以及其他附加信息,请参阅拉取请求和审查部分。
持续集成 (CI)#
持续集成 (CI) 是一种自动化方法,可以在不同环境中使用特定拉取请求所做的更改代码运行测试和构建。它在代码合并或集成到项目的主仓库之前充当稳定性检查。
创建拉取请求后,CI 将触发对代码的检查。根据代码更改的部分(例如文档、C++ 或其他语言),CI 会配置为运行相关的检查。
您将在 GitHub 上的拉取请求页面底部看到正在运行的检查。如果出现错误,请单击详细信息并研究构建失败的原因。

对文档所做更改的 CI 检查。#

对 python 文件所做更改的 CI 检查。#

对 R 文件所做更改的 CI 检查。#
除了检查 GitHub 仓库中更改(打开或合并拉取请求)的 CI 作业外,我们还使用 CI 进行 Apache Arrow 库的夜间构建和发布。
此外,扩展触发作业可以在您的拉取请求中使用,例如添加带有 @github-actions crossbow submit python
的注释将通过 GitHub actions 运行 PyArrow 测试。这些主要用于在不太常见的环境中运行测试,通常在首次贡献中不需要。
要阅读有关此主题的更多信息,请访问持续集成。
拉取请求的审查和合并#
提交拉取请求后,它将等待审核。开源的一大优点是您的工作可以获得大量反馈,从而得到完善。不要因为审查和更正导致 PR 合并所需的时间而灰心。这是一个支持质量的过程,您可以从中学习到很多东西。
如果合并仍然需要很长时间,请随时在拉取请求的评论部分提醒维护人员,并在 GitHub issue 上发布提醒。
如何让您的拉取请求得到审查?#
创建拉取请求后,Arrow 维护人员将收到通知,他们将尽快处理。如果过了几天仍然没有得到审查,请继续提及 GitHub issue 的报告者或您通过邮件列表或 GitHub 沟通的开发人员。
要在 GitHub 中添加**提及**,请在评论中插入 @ 并从列表中选择用户名。
评论拉取请求#
当仓库中打开拉取请求时,您和其他开发人员可以对提出的解决方案发表评论。
要创建一般评论,请导航到拉取请求的**对话**选项卡,然后在页面底部的评论框中开始编写。
您还可以评论文件的某个部分,以指出代码中的某些特定内容。为此,请导航到**已更改文件**选项卡,然后选择要插入评论的行。将鼠标悬停在行的开头,您将看到一个**蓝色加号图标**。您可以单击它或拖动它以选择多行,然后单击该图标以插入评论。
解决对话#
您可以通过单击**已更改文件**选项卡中的**解决对话**来解决拉取请求审查中的对话。这样,对话将被折叠并标记为已解决,这将使您更容易组织已完成的工作和仍需要解决的工作。
更新您的拉取请求#
获得审查后的程序类似于创建初始拉取请求。您需要在本地更新代码,进行提交,更新分支以使其与上游同步,并将代码推送到 origin。它也会在您的拉取请求中自动更新。
更新拉取请求的步骤如下:
像以前一样在本地更新代码并进行提交
$ git commit -am "<message>" #if all changed files are to be committed
**重要!**如果拉取请求分支上有其他开发人员的提交,或者您提交了来自 GitHub 的建议,则需要在变基之前使用
origin
更新您的代码!为此,请运行$ git pull origin <branch-name>
这里我们将新提交与本地分支合并,并且我们不进行变基。
现在我们必须更新分支以与上游 Arrow main 分支同步。这样拉取请求才能被合并。在这种情况下,我们使用变基。
$ git pull upstream main --rebase
这将在
upstream/main
的尖端之上重新定位您的本地提交。现在您可以通过运行以下命令来推送更改
$ git push origin <branch-name> --force
*注意强制推送到正在审查的分支:* 如果您希望审阅者查看您的更新,请确保您在 GitHub 上对 PR 发表评论,因为简单地强制推送不会在 GitHub 用户界面中触发通知。
另请参阅
了解更多关于更新分支的信息(我们使用 rebase
,而不是 merge
)以及压缩本地提交的信息,请参阅本地 Git 约定。
如果审查过程成功,您的拉取请求将被合并。