源代码控制工作流程

使用 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显示未暂存更改的差异。
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命令返回同步冲突:

  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

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