Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 Repo 命令行工具,对 Git 部分命令封装,将 百多个 Git 库有效的进行组织。要想直接克隆和管理这百多个 Git 库,还真不是一件简单的事情。有了repo就高效多了。
建议创建两个目录。分别用于获取开发版本号和最新版本号。假设开发的目标环境是develop,则创建develop和android两个目录。当中develop目录用于获取develop分支,而android目录用于获取主分支(master)。
获取主分支的方法例如以下:
#repo init -u https://android.googlesoutce.com/platform/manifest
获取特定分支的方法例如以下:
#repo init -u https://android.googlesource.com/platform/manifest -b develop
在初始化完毕过程中,须要设置开发人员的名字、邮箱地址,以及一些状态显示,通常建议使用Gmail邮箱。在初始化完毕后,就可以下载源码。下载源码的方法例如以下:
#repo sync
注意:repo不支持端点续传,repo的下载是基于单个project进行的,在Android中。眼下包括了170个左右的project,其列表位于.repo\project.list中。处于开发阶段的project和内核project不会被下载。在下载完毕前,源码会被隐藏,直到下载完毕后。开发人员才干看到下载的源码。
初始化repo仓:
repo init -u http://mgit-tm.mydevelop.com/hap/manifest.git 初始化repo仓
repo init -u http://mgit-tm.mydevelop.com/hap/manifest.git -b release_develop --no-repo-verify --repo-branch=stabel 初始化repo仓并切换到release_develop 分支
同步代码:
repo sync 同步所有代码
.repo/cat manifest.xml 查看所有projection项目
repo sync framework/base 同步单个projection项目代码,此处同步的是framework/base这个模块的代码
分支:
.repo/manifests git branch -a 查看repo分支,只能查看当前初始化仓https://android.googlesoutce.com/platform/manifest下面包含的所有分支,比如主线master和develop两个分支,如果他们分别存储在-u https://android.googlesoutce.com/platform/manifest和-u https://android.googlesoutcedevelop.com/platform/manifest下,那就需要分别获取。
repo init -u https://android.googlesource.com/platform/manifest -b master 初始化master仓,如果在develop仓下执行就是讲repo从develop切换到master仓,其实就是重新初始化master,切分支时,当前分支如果有改动没有提交,直接切就会报错,需要提交或者清除修改
回滚:
repo forall -c git reset --hard repo强制回滚清除修改代码,参考git reset --hard
添加修改:
git add 在对应的projection下进行
提交:
git commit -m “” 在对应的projection下进行
推送:
repo upload 在repo根目录进行,多个projection有修改时,会出现提示每个projection的修改信息,全部都是带有注释的,把需要提交的commit信息前面的注释符删掉,保存,即可完成提交
git push origin 当前分支:refs/for/远程分支 在projection下进行,将当前projection的修改推送到对应远程分支
特别注意:reop仓初始化的时候,我们使用了分支,现在我们projection修改之后又有分支,这两个是不一样的,repo仓的分支,是用来区分安卓系统的大版本的,如:android6.0 、android7.0、android8.0、android主线、android开发分支。每一个分支对应着系统的整套代码,大公司在维护时,还会新建很多的产品分支,用来适配各个产品,这些都由repo来控制。进入一个大版本分支如android8.0的文件夹,会有170个左右的projection,每个projection都是一个git仓,每个git仓也可以有多个分支,甚至每个projection的分支都可以不一样,但是为了便于管理,一般都会将所有的git仓的分支都统一,比如,一般就会统一为master和develop两个分支。所以,如果我们使用 init -u https://android.googlesource.com/platform/manifest -b android8.0 来初始化并下载了anroid8.0的所有代码,如果涉及多个projection的修改,可以在对应projection添加修改信息,最后在repo的根目录repo load提交生成gerrit,也可以分别在projection中添加修改信息,然后分别git push到对应分支,projection的默认分支名可以从projection的.git/config中获取到。