合并和修补

如果您有一个需要合并到生产 V8 分支中的 master 分支的补丁(例如重要的错误修复),请继续阅读。

以下示例使用 V8 的分支 2.4 版本。将 2.4 替换为您的版本号。阅读关于 V8 发布流程V8 版本编号 的文档以获取更多信息。

如果合并了补丁,则 Chromium 或 V8 的问题跟踪器上必须有一个相关问题。这有助于跟踪合并。您可以使用 模板 创建合并请求问题。

什么资格成为合并候选者? #

更多信息可以在 相关的 Chromium 页面 上找到。如有疑问,请发送电子邮件至 [email protected]

合并流程 #

Chromium 和 V8 跟踪器中的合并流程由以下形式的标签驱动

Merge-[Status]-[Branch]

目前对 V8 重要的标签是

  1. Merge-Request-{Branch} 启动了该流程,这意味着此修复应该合并到 {Branch} 中。{Branch} 是 V8 分支的名称/编号,例如 M72 的 7.2
  2. Merge-Review-{Branch} 表示合并尚未被批准用于 {Branch},例如因为缺少 Canary 覆盖范围。
  3. Merge-Approved-{Branch} 表示 Chrome TPM 已签署了合并。
  4. 合并完成后,Merge-Approved-{Branch} 标签将被替换为 Merge-Merged-{Branch}

如何检查提交是否已合并/回滚/具有 Canary 覆盖范围 #

使用 mergeinfo.py 获取根据 Git 与 $COMMIT_HASH 相连的所有提交。

tools/release/mergeinfo.py $COMMIT_HASH

如果它告诉您 Is on Canary: No Canary coverage,则您不应该立即合并,因为修复尚未部署在 Canary 构建上。一个经验法则是,在修复完成后的至少 3 天后进行合并。

如何创建合并 CL #

选项 1:使用 gerrit #

请注意,此选项仅在补丁在发布分支上干净应用时才有效。

  1. 打开您要回合并的 CL。
  2. 从扩展菜单(右上角三个垂直点)中选择“Cherry pick”。
  3. 输入“refs/branch-heads/X.X”作为目标分支(将 X.X 替换为正确的分支)。
  4. 修改提交消息
    1. 在标题前加上“Merged: ”。
    2. 删除与原始 CL 对应的页脚中的行(“Change-Id”、“Reviewed-on”、“Reviewed-by”、“Commit-Queue”、“Cr-Commit-Position”)。一定要保留“(cherry picked from commit XXX)”行,因为某些工具需要它将合并与原始 CL 相关联。
  5. 如果发生合并冲突,请继续创建 CL。要解决冲突(如果有) - 您可以使用 gerrit UI 或通过使用菜单(右上角三个垂直点)中的“下载补丁”命令轻松地在本地拉取补丁。
  6. 发送审查。

选项 2:使用自动化脚本 #

假设您要将修订版 af3cf11 合并到分支 2.4(请指定完整的 git 哈希 - 这里使用缩写是为了简单起见)。

tools/release/merge_to_branch.py --branch 2.4 af3cf11

使用 -h 运行脚本以显示其帮助消息,其中包括更多选项(例如,您可以指定包含补丁的文件,或者可以反转补丁,指定自定义提交消息,或恢复之前取消的合并过程)。请注意,该脚本将使用 V8 的临时检出 - 它不会触碰您的工作区。您也可以一次合并多个修订版;只需将它们全部列出来。

tools/release/merge_to_branch.py --branch 2.4 af3cf11 cf33f1b sf3cf09

着陆后:观察 分支瀑布 #

如果处理完您的补丁后,构建器之一不是绿色的,请立即回滚合并。一个机器人(AutoTagBot)在等待 10 分钟后会处理正确的版本控制。

修补 Canary/Dev 上使用的版本 #

如果您需要修补 Canary/Dev 版本(这种情况应该很少发生),请按照以下说明操作。谷歌员工:请在创建 CL 之前查看 内部网站

步骤 1:合并到滚动分支 #

例如,使用的版本是 5.7.433

tools/release/roll_merge.py --branch 5.7.433 af3cf11

步骤 2:让 Chromium 了解修复 #

例如,使用的 Chromium 分支是 2978

git checkout chromium/2978
git merge 5.7.433.1
git push

步骤 3:结束 #

Chrome/Chromium 应该在自动构建时获取更改。

常见问题解答 #

当两个人同时合并时,合并脚本中可能会发生竞争条件。如果是这种情况,请联系 [email protected][email protected]

有没有 TL;DR? #

  1. 在问题跟踪器上创建一个问题.
  2. 使用 tools/release/mergeinfo.py 检查修复的状态
  3. 在问题中添加 Merge-Request-{Branch}
  4. 等待有人添加 Merge-Approved-{Branch}
  5. 合并.