repo通过git库管理项目的清单文件,git库名为manifests。
$ repo <COMMAND>
//command:help、init、sync、upload、diff、download、forall、prune、start、status
$ repo init -u <URL>
-u 指定manifest的远程git库url
-m 指manifests库中的清单文件
-b指定文件中的一个版本
执行repo命令时,可以通过–trace参数,来看实际发生:
$ repo --trace init -u $URL -b $BRANCH -m $MANIFEST
$ repo sync
第一次触发同步操作=git clone
已经触发过同步操作=git remote update &&git rebase origin/
就是当前与本地分支所关联的远程分支。
代码合并可能会产生冲突,当冲突出现时,只需要解决完冲突,然后执行git rebase --continue即可。
$ repo upload //将本地的代码上传到远程服务器
$ repo download TARGET CHANGE
TARGET:upload是把改动内容提交到Gerrit,download是从Gerrit下载改动
CHANGE:指定要下载的PROJECT,譬如platform/frameworks/base, platform/packages/apps/Mms
指定要下载的改动内容。这个值是一个Review任务URL的最后几位数字。 譬如,AOSP的一个Review任务/#/c/23823/,其中23823就是。
$ repo forall [PROJECT_LIST] -c <COMMAND>
$ repo forall frameworks/base packages/apps/Mms -c "git status"
表示对platform/frameworks/base和platform/packages/apps/Mms同时执行git status命令。
$ repo prune [<PROJECT_LIST>]
删除指定PROJECT中,已经合并的分支
$ repo status [<PROJECT_LIST>]
查看多个git库的状态
$ repo start <BRANCH_NAME> [<PROJECT_LIST>]
切换到<BRANCH_NAME>指定的分支
开发流程:
repo init //初始化工程,指定待下载的分支
repo sync //下载代码
repo start //将本地git库切换到开发分支
在本地进行修改,验证后,提交到本地
repo upload //上传到服务器,等待review
下载远程代码:
$ repo sync -c //只下载manifest中设定的分支
常用命令
repo init -u URL -b ........ // 创建.repo
repo upload // 将代码提交到gerrit.
repo abandon master // 放弃master分支
repo forall -c "git reset --hard HEAD" // 所有代码执行git命令,回退到HEAD
// repo sync相当于git clone会把repository中的所有内容拷贝到本地,非首次运行repo sync相当于更新和合并.
// repo sync会更新.repo下面的文件,如果在merge的过程中出现冲突,这需要手动运行git rebase --continue.
repo sync -c -j 4
repo start master --all // 创建新分支