使用 Android 代码需要使用Git (一种开源版本控制系统)和Repo (一种在 Git 之上运行的 Google 构建的存储库管理工具)。请参阅源代码管理工具,了解 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 [branch] | 创建一个新的主题分支。 |
git checkout [branch] | 将HEAD 切换到指定分支。 |
git merge [branch] | 将[branch] 合并到当前分支。 |
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 存储库;它还可以将文件添加到 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
命令返回同步冲突:
- 查看未合并的文件(状态代码 = U)。
- 根据需要编辑冲突区域。
- 切换到相关的项目目录。添加并提交受影响的文件,然后重新调整更改的基础:
git add .
git commit
git rebase --continue
- 变基完成后,再次开始整个同步:
repo sync PROJECT0 PROJECT1 ... PROJECTN
清理客户
将更改合并到 Gerrit 后,更新本地工作目录,然后使用repo prune
安全删除过时的主题分支:
repo sync
repo prune
删除客户
由于所有状态信息都存储在您的客户端中,因此您只需从文件系统中删除该目录即可:
rm -rf WORKING_DIRECTORY
删除客户端会永久删除您尚未上传以供审核的所有更改。