使用 Android 代码需要使用 Git(一个开源版本控制系统)和 Repo(一个 Google 构建的、运行在 Git 之上的代码库管理工具)。 有关 Repo 和 Git 之间关系的说明以及指向每个工具的支持文档的链接,请参阅源代码控制工具。
流程
Android 开发涉及以下基本工作流程
- 使用 repo start启动新的主题分支。
- 编辑文件。
- 使用 git add暂存更改。
- 使用 git commit提交更改。
- 使用 repo upload将更改上传到审核服务器。
任务
在 Android 代码库中使用 Git 和 Repo 涉及执行以下常见任务。
| 命令 | 说明 | 
|---|---|
| repo init | 初始化新客户端。 | 
| repo sync | 将客户端同步到代码库。 | 
| repo start | 启动新分支。 | 
| repo status | 显示当前分支的状态。 | 
| repo upload | 将更改上传到审核服务器。 | 
| git add | 暂存文件。 | 
| git commit | 提交暂存的文件。 | 
| git branch | 显示当前分支。 | 
| git branch [分支] | 创建新的主题分支。 | 
| git checkout [分支] | 将 HEAD切换到指定的分支。 | 
| git merge [分支] | 将 [分支]合并到当前分支中。 | 
| git diff | 显示未暂存更改的差异。 | 
| git diff --cached | 显示暂存更改的差异。 | 
| git log | 显示当前分支的历史记录。 | 
| git log m/[codeline].. | 显示未推送的提交。 | 
有关使用 Repo 下载源代码的信息,请参阅下载源代码和Repo 命令参考。
同步客户端
要同步所有可用项目的文件
repo sync
要同步选定项目的文件
repo sync PROJECT0 PROJECT1 ... PROJECTN
创建主题分支
每当您开始更改时(例如,当您开始处理错误或新功能时),请在本地工作环境中启动一个主题分支。主题分支不是原始文件的副本;它是一个指向特定提交的指针,这使得创建本地分支和在它们之间切换成为一个轻量级的操作。通过使用分支,您可以将工作的一个方面与另一方面隔离。有关使用主题分支的有趣文章,请参阅分离主题分支。
要使用 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/PROJECTgit diff --cached
提交更改
提交是 Git 中修订控制的基本单元,它由整个项目的目录结构和文件内容的快照组成。使用此命令在 Git 中创建提交
git commit
当系统提示您输入提交消息时,请为提交给 AOSP 的更改提供简短(但有帮助)的消息。如果您不添加提交消息,则提交将失败。
将更改上传到 Gerrit
更新到最新修订版本,然后上传更改
repo syncrepo upload
这些命令会返回您已提交的更改列表,并提示您选择要上传到审核服务器的分支。如果只有一个分支,您会看到一个简单的 y/n 提示。
解决同步冲突
如果 repo sync 命令返回同步冲突
- 查看未合并的文件(状态代码 = U)。
- 根据需要编辑冲突区域。
- 更改为相关的项目目录。添加并提交受影响的文件,然后变基更改git add .git commitgit rebase --continue
- 变基完成后,重新开始整个同步repo sync PROJECT0 PROJECT1 ... PROJECTN 
清理客户端
将更改合并到 Gerrit 后,更新您的本地工作目录,然后使用 repo prune 安全地删除过时的主题分支
repo syncrepo prune
删除客户端
由于所有状态信息都存储在您的客户端中,您只需要从文件系统中删除该目录即可
rm -rf WORKING_DIRECTORY
删除客户端会永久删除您尚未上传以供审核的任何更改。