源代码控制工作流程

使用 Android 代码需要使用 Git(一个开源版本控制系统)和 Repo(一个 Google 构建的、运行在 Git 之上的代码库管理工具)。 有关 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 [分支] 创建新的主题分支。
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/PROJECT
git diff --cached

提交更改

提交是 Git 中修订控制的基本单元,它由整个项目的目录结构和文件内容的快照组成。使用此命令在 Git 中创建提交

git commit

当系统提示您输入提交消息时,请为提交给 AOSP 的更改提供简短(但有帮助)的消息。如果您不添加提交消息,则提交将失败。

将更改上传到 Gerrit

更新到最新修订版本,然后上传更改

repo sync
repo upload

这些命令会返回您已提交的更改列表,并提示您选择要上传到审核服务器的分支。如果只有一个分支,您会看到一个简单的 y/n 提示。

解决同步冲突

如果 repo sync 命令返回同步冲突

  1. 查看未合并的文件(状态代码 = U)。
  2. 根据需要编辑冲突区域。
  3. 更改为相关的项目目录。添加并提交受影响的文件,然后变基更改
    git add .
    git commit
    git rebase --continue
    
  4. 变基完成后,重新开始整个同步
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

清理客户端

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

repo sync
repo prune

删除客户端

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

rm -rf WORKING_DIRECTORY

删除客户端会永久删除您尚未上传以供审核的任何更改。