合并和修补
如果您有一个需要合并到生产 V8 分支中的 master
分支的补丁(例如重要的错误修复),请继续阅读。
以下示例使用 V8 的分支 2.4 版本。将 2.4
替换为您的版本号。阅读关于 V8 发布流程 和 V8 版本编号 的文档以获取更多信息。
如果合并了补丁,则 Chromium 或 V8 的问题跟踪器上必须有一个相关问题。这有助于跟踪合并。您可以使用 模板 创建合并请求问题。
什么资格成为合并候选者? #
- 该补丁修复了一个严重的错误(按重要性排序)
- 安全漏洞
- 稳定性错误
- 正确性错误
- 性能错误
- 该补丁不会更改 API。
- 该补丁不会更改分支切割之前存在的行为(除非行为更改修复了错误)。
更多信息可以在 相关的 Chromium 页面 上找到。如有疑问,请发送电子邮件至 [email protected]。
合并流程 #
Chromium 和 V8 跟踪器中的合并流程由以下形式的标签驱动
Merge-[Status]-[Branch]
目前对 V8 重要的标签是
Merge-Request-{Branch}
启动了该流程,这意味着此修复应该合并到{Branch}
中。{Branch}
是 V8 分支的名称/编号,例如 M72 的7.2
。Merge-Review-{Branch}
表示合并尚未被批准用于{Branch}
,例如因为缺少 Canary 覆盖范围。Merge-Approved-{Branch}
表示 Chrome TPM 已签署了合并。- 合并完成后,
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 #
请注意,此选项仅在补丁在发布分支上干净应用时才有效。
- 打开您要回合并的 CL。
- 从扩展菜单(右上角三个垂直点)中选择“Cherry pick”。
- 输入“refs/branch-heads/X.X”作为目标分支(将 X.X 替换为正确的分支)。
- 修改提交消息
- 在标题前加上“Merged: ”。
- 删除与原始 CL 对应的页脚中的行(“Change-Id”、“Reviewed-on”、“Reviewed-by”、“Commit-Queue”、“Cr-Commit-Position”)。一定要保留“(cherry picked from commit XXX)”行,因为某些工具需要它将合并与原始 CL 相关联。
- 如果发生合并冲突,请继续创建 CL。要解决冲突(如果有) - 您可以使用 gerrit UI 或通过使用菜单(右上角三个垂直点)中的“下载补丁”命令轻松地在本地拉取补丁。
- 发送审查。
选项 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? #
- 在问题跟踪器上创建一个问题.
- 使用
tools/release/mergeinfo.py
检查修复的状态 - 在问题中添加
Merge-Request-{Branch}
。 - 等待有人添加
Merge-Approved-{Branch}
。 - 合并.