原文地址 译者:远方的自由 转载请注明出处: http://blog.csdn.net/z2066411585
管理Android代码需要使用Git(一个开源的版本控制系统)和Repo(Git上运行的Google构建的存储库管理工具)
Git用在处理分布多个存储库项目中,Android使用Git进行本地操作,如本地分支,提交,差异和编辑,安装Andriod项目的挑战之一是如何最好的支持外部社区,从爱好者社区到大型OEM构建大众市场消费者设备. 我们希望组件可以被替换 并且我们希望组件在Android之外拥有更多的可能,我们首先选择了一个分布式控制系统,然后把它定位到Git. 有关Git更多的细节,参考Git Documentation
Repo会统一管理Git存储库,执行上传到 Gerrit revision control system,并自动化Android开发工作流程的部分内容. Repo并不意味要取代Git,只是为了更容易在Android上下文中使用Git,Repo命令是一个可执行的脚本,可以放在路径的任何地方,在使用Android源文件时,你可以使用Repo进行跨网络操作. 例如,使用单个Repo命令,你可以将多个存储库中的文件下载到本地工作目录.在大多数情况,你可以使用Git而不是Repo或混合Repo和Git来形成复杂的命令,然而将Repo用于基本的跨网络操作将使你的工作更加简单,有关Repo更多的细节,参见Repo Command Reference.
其他工具包含Gerrit,一个基于Web的代码审查系统,用于使用Git项目, Gerrit允许授权用户提交修改,鼓励更集中的使用Git,如果通过代码审查,则会自动合并.另外,Gerrit通过浏览器中并排显示更改并内嵌评论,使审阅变得更加简单
Android 开发涉及以下基本流程:
图1: 基本Android工作流程
在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] | 合并指定分支到当前分支 |
git diff | 显示未跟踪更改的差异 |
git diff –cached | 显示分阶段更改的差异 |
git log | 显示当前分支的历史记录 |
git log m/[codeline].. | 显示未被推送的提交 |
有关使用Repo下载源代码信息,参见DownloadingTheSource和https://source.android.com/setup/using-repo.html
同步所有可用项目的文件
repo sync
同步所选项目文件
repo sync PROJECT0 PROJECT1 … PROJECTN
每当你开始更改时,例如在开始处理错误或新功能时,在本地工作环境中创建主分支,主分支不是原始文件的副本,它是一个指向特定提交的指针,这使得创建本地分支并在它们切换是一种轻量级操作.通过使用分支,你可以将工作与其他方面分开,有关使用主分支的文章,参见 Separating topic branches
要使用Repo创建主分支,请导航到该项目运行:
repo start BRANCH_NAME . 表示当前工作目录中的项目
验证新分支是否创建
repo status
将分支分配给特定的项目
repo start BRANCH_NAME PROJECT_NAME
有关所有项目的列表,参见 android.googlesource.com,如果你已经导航到项目目录,只需要一段时间来表示当前项目. 切换到本地工作环境中的另外一个分支
git checkout BRANCH_NAME
查看现有分支列表
git branch
或
repo branches
这两个命令都返回现有分支的名单,前面加星号表示当前分支的名称
注意: 一个错误可能导致repo同步重置本地主分支,如果运行repo sync后,git分支显示*,请再次运行git checkout
默认情况下,Git通知但不跟踪你在项目中所做的更改,为了告诉Git保存你的改变,你必须标记或分级这些改变以包含在提交中
阶段的提交:
git add
该命令接受项目目录中文件或目录的参数,尽管git add 不会简单地添加文件到git仓库,它可以用来对文件进行修改和删除
列出文件的状态:
repo status
查看未提交的编辑(没有标记为提交的本地编辑):
repo diff
查看提交的修改(找到被标记为提交的编辑),确保你在项目目录下,然后用缓存的参数运行git diff
cd ~/WORKING_DIRECTORY/PROJECT git diff –cached
图2:未提交和已提交的编辑
提交是Git中修订控制的基本单元,由整个项目的目录结构和文件内容组成,在Git中创建一个提交:
git commit
当提示你提交消息时,请为提交给AOSP的更改提供简短描述,如果不添加提交描述,则提交终止:
更新到最新版本,然后上传更改:
repo sync repo upload
此命令返回你已提交的更改列表,并提示你选择要上传到审阅服务器的分支,如果只有一个分支,你会看到一个简单的y/n提示
如果repo sync 命令返回同步冲突:
1.查看未合并的文件,(status code = U) 2.根据需要编辑冲突区域 3.切换到相关的项目目录,添加并提交受影响的文件,然后重新设置更改:
git add .
git commit
git rebase --continue
4.rebase完成后,再次启动整个同步:
repo sync PROJECT0 PROJECT1 … PROJECTN
合并更改到Gerrit后,更新你的本地工作目录,然后使用repo prune安全删除旧的主分支
repo sync repo prune
由于所有信息都储存在客户端中,因此只需从文件系统中删除目录即可
rm -rf WORKING_DIRECTORY
永久删除客户端会删除你未上传用于审核的所有更改