源代码控制工作流程

如需使用 Android 代码,您需要使用 Git(一种开源版本控制系统)和 Repo(一种对 Git 构成补充的 Google 代码库管理工具)。请参阅源代码控制工具,了解有关 Repo 和 Git 之间关系的说明,以及指向每个工具的支持文档的链接。

流程

Android 开发涉及以下基本工作流程:

  1. 使用 repo start 新建一个主题分支。
  2. 修改文件。
  3. 使用 git add 暂存更改。
  4. 使用 git commit 提交更改。
  5. 使用 repo upload 将更改上传到审核服务器。

任务

在 Android 代码库中使用 Git 和 Repo 会涉及到执行以下常见任务。

命令 说明
repo init 初始化一个新客户端。
repo sync 将客户端同步到代码库。
repo start 新建一个分支。
repo status 显示当前分支的状态。
repo upload 将更改上传到审核服务器。
git add 暂存文件。
git commit 提交暂存的文件。
git branch 显示当前分支。
git branch [branch] 创建新的主题分支。
git checkout [branch] HEAD 切换到指定分支。
git merge [branch] [branch] 合并到当前分支。
git diff 显示未暂存更改的 diff 结果。
git diff --cached 显示已暂存更改的 diff 结果。
git log 显示当前分支的历史记录。
git log m/[codeline].. 显示未推送的提交。

如需了解如何使用 Repo 下载源代码,请参阅下载源代码Repo 命令参考文档

同步客户端

如需同步所有可用项目的文件,请运行以下命令:

repo sync

如需同步所选项目的文件,请运行以下命令:

repo sync PROJECT0 PROJECT1 ... PROJECTN

创建主题分支

当您开始进行更改(例如当您开始处理 bug 或实现新功能)时,请在本地工作环境中新建一个主题分支。主题分支不是原始文件的副本;它一个指针,指向某一项提交内容,可以简化创建本地分支以及在本地分支之间进行切换的操作。通过使用分支,您可以将工作的某个方面与其他方面分隔开来。请参阅分隔主题分支(一篇有关使用主题分支的有趣文章)。

如需使用 Repo 新建一个主题分支,请转到相应项目并运行以下命令:

repo start BRANCH_NAME .

尾随句点 ( .) 代表当前工作目录中的项目。

如需验证新分支是否已创建,请运行以下命令:

repo status .

使用主题分支

如需将分支分配给特定项目,请运行以下命令:

repo start BRANCH_NAME PROJECT_NAME

如需查看所有项目的列表,请参阅 android.googlesource.com。如果您已转到相应的项目目录,则只需使用一个句点来表示当前项目即可。

如需切换到本地工作环境中的另一个分支,请运行以下命令:

git checkout BRANCH_NAME

如需查看现有分支的列表,请运行以下命令:

git branch

repo branches

这两个命令均可返回现有分支的列表,并会在当前分支的名称前面标注星号 (*)。

暂存文件

默认情况下,Git 会检测到您在项目中所做的更改,但不会跟踪这些更改。如需让 Git 保存您的更改,您必须标记或暂存这些更改,以将其纳入到提交中。

如需暂存更改,请运行以下命令:

git add

此命令接受将项目目录中的文件或目录作为参数。git add 并不像其名称表示的这样只是简单地将文件添加到 Git 代码库,它还可以用于暂存文件的修改和删除的内容。

查看客户端状态

如需列出文件状态,请运行以下命令:

repo status

如需查看未提交的修改(标记为需要提交的本地修改),请运行以下命令:

repo diff

如需查看已提交的修改(已标记为需要提交的本地修改),请确保您已转到相应的项目目录,然后运行包含 cached 参数的 git diff

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

提交更改

在 Git 中,提交是修订版本控制的基本单位,包含目录结构的快照以及整个项目的文件内容。您可以使用以下命令在 Git 中创建提交:

git commit

当系统提示您输入提交消息时,请针对要提交至 AOSP 的更改提供一条简短(但有帮助)的消息。如果您不添加提交消息,提交将会失败。

将更改上传到 Gerrit

请更新至最新版本,然后上传相应更改:

repo sync
repo upload

运行这些命令后,系统会随即列出您已提交的更改,并提示您选择要上传到审核服务器的分支。如果只有一个分支,您会看到一个简单的 y/n 提示符。

解决同步冲突

如果 repo sync 命令返回同步冲突,请执行以下操作:

  1. 查看未合并的文件(状态代码 = U)。
  2. 根据需要修改存在冲突的地方。
  3. 对相关项目目录进行更改。添加并提交受影响的文件,然后对这些更改执行“衍合”(rebase) 命令:
    git add .
    git commit
    git rebase --continue
    
  4. 当衍合完成后,再一次开始整个同步过程:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

清理客户端

将更改合并到 Gerrit 之后,请更新您的本地工作目录,然后使用 repo prune 来安全移除已过时的主题分支:

repo sync
repo prune

删除客户端

由于所有状态信息都会存储在客户端中,您只需从文件系统中删除相应目录即可:

rm -rf WORKING_DIRECTORY

删除客户端将永久删除您尚未上传以供审核的所有更改。