提交代码变更

本页介绍了向 Android 开源项目 (AOSP) 提交代码变更的完整流程,包括如何请求审核和跟踪您的变更。

AOSP 依赖于 Gerrit,这是一个基于 Web 的代码审核系统,适用于使用 Git 的项目。

签署贡献者许可协议

在为 AOSP 贡献任何代码变更之前,您必须阅读贡献者许可协议和标头,并签署以下协议之一

启动分支

对于您打算进行的每个代码变更,请执行以下步骤

  1. 在相关的 Git 代码库中启动新分支。分支不是原始文件的副本;它是一个指向特定提交的指针,这使得创建本地分支和在分支之间切换成为一种轻量级操作。通过使用分支,您可以区分彼此的变更。运行此命令以启动分支

    repo start BRANCH_NAME

    您可以同时在同一代码库中启动多个独立的分支。BRANCH_NAME 分支是您工作区的本地分支,既不包含在 Gerrit 中,也不包含在最终源代码树中。分支也特定于您所在的项目,因此,如果您需要更改不同项目中的文件作为同一变更的一部分,则需要在每个您更改文件的项目中创建一个分支。

  2. (可选)验证分支是否已创建

    repo status .

    您应该会看到您新创建的分支。例如

    project frameworks/native/                      branch mynewbranch

进行并测试您的变更

按照以下步骤进行并测试您的变更

  1. 为确保您正在使用最新的代码库,请对整个代码库执行同步

    repo sync

    如果您在同步期间遇到任何冲突,请参阅解决同步冲突的步骤 2-4。

  2. 查找要更改的代码。要查找代码,请考虑使用Android 代码搜索。您可以使用 Android 代码搜索来查看 AOSP 源代码,就像您实际使用它时一样布局。如需了解详情,请参阅Code Search 使用入门。要查看 Android 代码搜索中 main 分支中的所有代码,请转到 https://cs.android.com/android/platform/superproject/main

  3. 修改或添加源文件。对于所做的任何更改

  4. 构建 Android.

  5. 测试您的构建.

暂存并提交您的变更

提交是 Git 中修订控制的基本单位,它包含整个项目的目录结构和文件内容的快照。按照以下步骤提交您的变更

  1. 默认情况下,Git 会注册但不跟踪您所做的变更。要指示 Git 跟踪您的变更,您必须标记或暂存这些变更以包含在提交中。运行此命令以暂存变更

    git add -A

    此命令会跟踪您对任何文件所做的变更。

  2. 获取暂存区域中的文件,并将它们提交或存储在您的本地数据库中

    git commit -s

    默认情况下,会打开一个文本编辑器,并提示您提供提交消息。

  3. 以以下格式提供提交消息

    • 第 1 行:标题。提供变更的单行摘要(最多 50 个字符)。考虑使用前缀来描述您更改的区域,后跟对此提交中所做变更的描述,例如以下包含用户界面变更的示例

      ui: Removes deprecated widget
      
    • 第 2 行:空行。在标题后跟一个空行。

    • 第 3 行:正文。提供一个长描述,最大硬换行长度为 72 个字符。描述变更解决了什么问题以及如何解决。尽管正文是可选的,但对于需要回过头来参考变更的其他人来说,它很有帮助。请务必简要说明任何假设或背景信息,这些信息在其他贡献者处理此功能时可能很重要。

    要阅读有关优秀提交描述的博客(附带示例),请参阅如何编写 Git 提交消息

  4. 保存提交。

repo init 期间提供的唯一变更 ID 以及您的姓名和电子邮件会自动添加到您的提交消息中。

上传变更以供审核

将您的变更提交到您的个人 Git 历史记录后,将其上传到 Gerrit

  1. 运行以下命令以上传所有项目中的所有提交

    repo upload

    所有项目中的所有变更都包含在上传中。

    系统会提示您运行 Hook 脚本。

  2. a,然后按 Enter

    系统会提示您批准上传

    Upload project frameworks/native/ to remote branch main:
    branch BRANCH_NAME ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
           ff46b36d android codelab change
    to https://android-review.googlesource.com/ (y/N)?
    
  3. y,然后按 Enter 以批准上传。

您应该会收到类似于 remote: SUCCESS 的消息。

请求审核

成功上传后,Repo 会为您提供指向 Gerrit 中变更的链接。点击该链接以在审核服务器上查看您的变更、添加评论或为您的变更请求特定审核者。对代码的所有变更都必须由相应的代码所有者审核。

要请求审核

  1. 在 Gerrit 中,点击建议所有者

    Suggest owners link in Gerrit

    图 1. Gerrit 中的“建议所有者”链接。

    审核者对话框随即出现。此对话框包含可以审核您的变更的代码所有者列表。

  2. 点击代码所有者以将其添加到您的审核中。

    发送按钮已激活。

  3. (可选)输入您希望审核您的变更的任何其他人的电子邮件地址。

  4. (可选)点击“自动提交”旁边的 +1 以在您收到批准后自动提交变更。如果您不点击此按钮,则需要 Google 员工为您提交变更。

  5. 点击发送以发送变更以供审核。

代码所有者审核您的代码变更,并提供反馈供您解决或批准变更。

确定变更状态

要确定您的变更中文件的状态,请查看变更中文件旁边的以下图标

  • (对勾图标):已获得代码所有者批准
  • (叉号图标):未获得代码所有者批准
  • (时钟图标):等待代码所有者批准

下图显示了应用于变更中文件的这些状态图标

Example of files with icons showing code owner approval

图 2. 显示代码所有者批准的图标的文件示例。

解决反馈并上传替换变更

如果审核者请求修改您的更新,您可以在 Git 中修改您的提交,这会在同一变更中生成新的补丁集。

要解决反馈并修改您的变更

  1. 按照进行并测试您的变更中的步骤 2-4 操作。

  2. 运行以下命令以修改您的变更

    git add -A
    git commit --amend
  3. 上传您的变更.

当您上传修改后的变更时,它会在 Gerrit 和您的本地 Git 历史记录中替换原始变更。

解决同步冲突

如果其他变更已提交到源代码树,并且与您的变更冲突,您会收到一条消息,指出您有冲突。要解决冲突

  1. 确保您正在使用最新的代码

    repo sync .

    repo sync 命令从源服务器获取更新,然后尝试自动将您的 HEAD 变基到新的远程 HEAD

  2. 如果自动变基不成功,请执行手动变基

    repo rebase .
  3. 解决合并冲突。如果您没有解决合并冲突的首选方法,可以使用 git mergetool 手动修复文件之间的冲突。

  4. 当您成功修复冲突文件后,运行此命令以应用新的提交

    git rebase --continue

提交变更

提交通过审核和验证流程后,Google 审核者必须为您提交代码。其他用户可以运行 repo sync 以将更新拉取到他们各自的本地客户端。

合并您的提交后,您可以访问Android 持续集成信息中心,以监控您的提交何时集成到代码树中。