Go Wiki: GerritBot

GerritBot 是一个用于将 GitHub Pull Requests (PR) 导入 Gerrit 进行代码审查的工具。它的创建是因为 Go 团队的所有审查都在 Gerrit 中进行,但我们希望允许通过 GitHub PR 贡献代码的更常见工作流程。

目录

工作流程

  • 用户可以像向任何其他接受 PR 的 GitHub 项目一样,将 GitHub PR 上传到我们任何一个 GitHub 仓库。
  • GerritBot 将导入 PR 的更改,并在 GitHub PR 中发布一条消息,其中包含 Gerrit 审查的链接。
  • 所有评论都在 Gerrit 中处理。GitHub PR 上的任何评论都将被忽略。
  • PR 作者可以继续向 PR 使用的分支上传 commit,以解决 Gerrit 的反馈。
  • 对 commit 消息的任何更改都必须通过编辑 GitHub PR 的标题和描述来完成,而不是通过 Gerrit 或 git。(详情请参阅下面的 FAQ)。
  • 草稿 PR 将被导入为 WIP
  • 一旦代码准备好合并,维护者将在 Gerrit 中提交更改,GerritBot 将关闭该 issue。
  • 同样,如果 Gerrit 中的某个更改被关闭或放弃,相应的 PR 也将被关闭。

常见问题

我需要一个 Google 账户才能注册 Gerrit 吗?为什么我不能使用我的 GitHub 账户登录?

您需要一个 Gmail 或其他 Google 账户才能 注册 Gerrit。这是运行我们 Gerrit 实例的基础设施的一个限制,超出我们的控制范围。此外,您已经需要一个 Google 账户来 签署我们的 CLA,这是我们接受您贡献的先决条件。

我在 Gerrit 的评论中留下了回复,但只有我能看到

Gerrit 中代码评论的回复首先会保存为草稿,需要通过“Reply”(回复)按钮发布。这是为了防止每次审查“会话”发送多封电子邮件,并且类似于 GitHub 中的 待定审查工作流程。如果您在“Reply”按钮文本旁边看到一个数字,则表示您有待发布的草稿。

如果您在 Gerrit 网页界面的顶部附近看不到一个大的蓝色“Reply”按钮,请确保您已 登录 Gerrit,这需要 Gmail 或其他 Google 账户。

GerritBot 如何确定最终的 commit 消息?

需要记住的关键点

  • GitHub PR 的标题和 PR 描述(第一个 PR 评论)会定期以纯文本形式导入 Gerrit,作为 Gerrit 的 commit 消息。
  • 因此,要更新 Gerrit 的 commit 消息,您必须使用 GitHub 网页界面 编辑 PR 的标题和 PR 描述
  • 无法仅通过推送另一个带有更新 commit 消息的 commit 来更新 Gerrit commit 消息。(推送另一个 commit 不会自动更新 GitHub PR 的标题或 PR 描述,因此更新后的文本不会导入 Gerrit)。

通过 GitHub PR 更新 Gerrit commit 消息

Screenshot of the GitHub PR web interface highlighting
the “Edit” button in top-right (for editing the Gerrit commit message title) and
the “Edit” menu option on the first comment (for editing the Gerrit commit message
body).

更详细地说,GerritBot 使用 GitHub PR 的最新 PR 标题和 PR 描述来构建 Gerrit 更改的 commit 消息。这些文本可以通过 GitHub 网页界面(而不是 Gerrit 或 git)进行编辑。

  • PR 标题可以通过 PR 页面右上角的“Edit”(编辑)按钮进行编辑。这用于 Gerrit commit 消息的第一行。
  • PR 描述位于 GitHub PR 的“Conversation”(对话)标签下的第一个文本区域。可以通过“...”菜单上的“Edit”(编辑)选项进行编辑。此文本用于 Gerrit commit 消息体的其余部分。

在 GitHub 中编辑 PR 后,Gerrit 更改的更新可能需要 10 分钟左右。

注意:Gerrit 导入的是您在 GitHub 中编辑消息时可见的纯文本,并且不导入您在编辑之前在 GitHub 中看到的渲染文本

一个常见的相关困惑点是关于问题引用。例如,GerritBot 或人工审查者可能会要求您 避免使用问题引用的 URL。在 Gerrit 中,您可能会看到问题的完整 URL,但在 GitHub 网页界面中,您可能只看到像 #12345 这样的问题引用,并且可能不清楚 URL 来自何处。这可能是由于 GitHub 的渲染视图与底层原始/纯文本之间的混淆所致。如果 GitHub 网页界面在您编辑 GitHub 中的文本时显示类似 Fixes https://github.com/golang/go/issues/12345 的内容,请将其更改为类似 Fixes #12345Fixes golang/go#12345。有关问题引用的更多信息,请参阅贡献指南

什么是 CL?什么是 Gerrit 更改?

CL 是“change list”(更改列表)的缩写,本质上是建议引入到仓库中的一个补丁。Go 项目使用 Gerrit 来仔细审查每个 CL。一个 CL 的例子是 https://golang.ac.cn/cl/508475

Gerrit change 是 CL 的另一个术语。

我可以帮助审查他人的 CL 吗?

是的,强烈鼓励这样做,这也是熟悉 Gerrit、Go 项目的 代码审查流程 以及 Go 标准库、运行时、编译器等内部知识的好方法。

您可以在 这里 浏览当前打开的 CL,并通过点击星标图标订阅感兴趣的 CL 的更新。

您不必成为代码专家也能帮助进行初步审查分拣。有关更多详细信息,请参阅 Gardening wiki 页面的 帮助审查 CL 部分。

我听说 Gerrit 要求每次更改有一个 commit。我可以将多个 commit 上传到我的 PR 吗?

您可以上传任意数量的 commit。GerritBot 将负责将您的 commit 合并为一个 Gerrit 可以处理的更改。

为什么 GerritBot 是我更改的所有者?

这是由于 Gerrit 处理作为另一个用户执行操作的方式存在一个未解决的 Bug。一旦修复,原始作者也将是该更改的所有者。

我能让 GerritBot 停止在我的 PR 上发布评论吗?

您可以使用 comments 斜杠命令来切换 GerritBot 的评论(例如,/comments off)。

反馈和 Bug 报告

提交一个 issue 并在标题中使用 x/build/cmd/gerritbot: 前缀。

我想添加一个功能/修复一个 Bug


此内容是 Go Wiki 的一部分。