拉取请求的生命周期#

如前所述,Arrow 项目使用 Git 进行版本控制,并采用基于拉取请求的工作流程。这意味着您通过在 Git 中创建一个分支来贡献代码的更改或“补丁”,对代码进行更改,将更改推送到您的 origin(这是您在 GitHub 上的 Arrow 仓库的 fork),然后针对官方的 Arrow 仓库创建一个拉取请求(该仓库在您的设置中保存为 upstream)。

您现在应该已经设置好 Git,克隆了仓库,成功构建了 Arrow,并且有一个 GitHub 问题可以着手处理。

在更改代码之前,您应该在 Git 中创建一个新分支。

  1. 使用 upstream/main 更新您的 fork 的 main 分支。在 arrow 目录中运行此命令。

    $ 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 仅在可以快进且没有冲突或创建合并提交的情况下应用更改。

  2. 创建新分支

    $ 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

创建拉取请求#

一旦您对更改满意,请运行测试代码检查器,然后继续提交更改。

  1. 添加并提交更改

    $ git add <filenames>
    $ git commit -m "<message>"
    

    或者,如果所有更改的文件都要提交,您可以一步完成添加和提交(-a 添加所有,-m 添加消息)

    $ git commit -am "<message>"
    
  2. 然后将您的工作推送到您的 Arrow fork

    $ git push origin <branch-name>
    

注意

您的工作现在仍在您的密切关注下,因此如果您看到想要更正的任何错误,这不是问题。您可以进行额外的提交来更正,Git 有很多方法来修订、删除、修改等。有关更多信息,请参阅https://git-scm.cn/docs

在您创建拉取请求之前,Arrow 仓库上没有任何可见内容,您可以自由地进行实验。

如果一切准备就绪,您可以创建拉取请求了!

  1. 前往 https://github.com/<您的用户名>/arrow,您将看到一个框,其中显示您推送的分支名称,旁边是一个绿色的按钮 Compare & pull request(比较并创建拉取请求)。点击后,您应该添加拉取请求的标题和描述。在下方,您可以再次查看您所做的更改。

    另请参阅

    在 Arrow 仓库中命名拉取请求的更多详细信息以及其他附加信息,请参阅拉取请求和审查部分。

持续集成 (CI)#

持续集成 (CI) 是一种自动化方式,用于在不同环境中对特定拉取请求更改的代码运行测试和构建。它在代码合并或集成到项目主仓库之前进行稳定性检查。

拉取请求创建后,CI 将触发代码检查。根据代码的哪个部分被更改(例如文档、C++ 或其他语言),CI 会配置运行相关的检查。

您将在 GitHub 拉取请求页面底部看到正在运行的检查。如果出现错误,请点击详情并研究导致构建失败的原因。

CI window showing the status of the code checks in case of changes made to the documentation.

对文档更改的 CI 检查。#

CI window showing the status of the code checks in case of changes made to the python files

对 Python 文件更改的 CI 检查。#

CI window showing the status of the code checks in case of changes made to the R files.

对 R 文件更改的 CI 检查。#

除了检查 GitHub 仓库中更改(拉取请求的开启或合并)的 CI 作业之外,我们还使用 CI 进行 Apache Arrow 库的夜间构建和发布。

此外,您可以在拉取请求中使用扩展触发作业,例如添加带有 @github-actions crossbow submit python 的评论,这将通过 GitHub actions 运行 PyArrow 测试。这些主要用于在不常见的环境中运行测试,对于首次贡献者通常不需要。

要了解更多关于此主题的信息,请访问持续集成

拉取请求的审查和合并#

拉取请求提交后会等待审查。开源的一大优点是您的工作可以获得大量反馈,从而使其更加完善。不要因审查和更正导致 PR 合并所需的时间过长而灰心。这是一个支持质量的过程,通过它您可以学到很多东西。

如果合并时间过长,请随时在拉取请求的评论区提醒维护者,并在 GitHub issue 上发布提醒。

如何让您的拉取请求获得审查?#

创建拉取请求后,Arrow 维护者将收到通知,他们会尽快处理。如果过了几天仍未被审查,请继续@ GitHub issue 的报告者,或通过邮件列表或 GitHub 与您交流过的开发人员。

要在 GitHub 中进行提及,请在评论中插入 @ 并从列表中选择用户名。

评论拉取请求#

当仓库中存在一个开放的拉取请求时,您和其他开发人员可以对提议的解决方案发表评论。

要创建一般性评论,请导航到拉取请求的 Conversation(对话)选项卡,然后在页面底部的评论框中开始撰写。

您也可以对文件的某个部分发表评论,以指出代码中的特定内容。为此,请导航到 Files changed(文件更改)选项卡,然后选择要插入评论的行。将鼠标悬停在行的开头,您将看到一个蓝色加号图标。您可以单击它或拖动以选择多行,然后单击该图标插入评论。

解决对话#

您可以通过在 Files changed(文件更改)选项卡中单击 Resolve conversation(解决对话)来解决拉取请求审查中的对话。这样,对话将被折叠并标记为已解决,这将使您更容易组织哪些已完成,哪些仍需要处理。

更新您的拉取请求#

收到审查意见后的流程与创建初始拉取请求类似。您需要在本地更新代码,进行提交,更新分支使其与 upstream 同步,并将您的代码推送到 origin。它将自动更新到您的拉取请求中。

更新拉取请求的步骤如下:

  1. 像之前一样在本地更新代码并进行提交

    $ git commit -am "<message>" #if all changed files are to be committed
    
  2. 重要!如果在拉取请求分支上有其他开发人员的提交,或者您提交了 GitHub 上的建议,您需要在 rebase 之前使用 origin 更新您的代码!运行以下命令:

    $ git pull origin <branch-name>
    

    这里我们将新提交与我们的本地分支合并,我们不做 rebase。

  3. 现在我们需要更新分支,使其与 upstream main Arrow 分支同步。这样拉取请求才能被合并。在这种情况下我们使用 rebase。

    $ git pull upstream main --rebase
    

    这将把您的本地提交 rebase 到 upstream/main 的顶部。

  4. 现在您可以通过运行以下命令推送更改:

    $ git push origin <branch-name> --force
    

    关于强制推送到正在审查的分支的注意:如果您希望审查者查看您的更新,请确保在 GitHub 的 PR 上发表评论,因为简单地强制推送不会在 GitHub 用户界面中触发通知。

另请参阅

有关更新分支(我们使用 rebase,而不是 merge)和压缩本地提交的更多信息,请参阅本地 git 约定

如果审查过程成功,您的拉取请求将被合并。

恭喜!🎉#