Android
使用Git
作为基础的代码管理工具。Google
开发了Gerrit
进行代码审核以便更好的对代码进行集中式管理,还开发了repo
命令行工具,对Git部分命令进行封装,用于管理Android
项目,可将百多个Git
仓库有效的进行组织。repo
并不是用来取代Git,而是用Python
对Git
进行了一定的封装,简化了对多个Git
版本仓库的管理。
参考资料:
repo
安装repo
工具的git-repo
仓库获取方式为:
git clone https://github.com/esrlabs/git-repo.git
git-repo
源码到本地路劲,比如/opt/git-repo
;git-repo
源码中的repo工具到`/home/user/bin/rep目三、录,并赋予可执行权限;/home/user/bin/repo
脚本中的REPO-URL
链接指向本地的/opt/git-repo
即可正常使用了mkdir repo_dir && cd repo_dir
repo init -u url -m manifest-file
repo init
命令会在当前目录下安装repository
,并在当前目录创建一个目录:.repo
;-u
参数指定一个URL
,repo
将从这个URL指定的repository
中取得manifest
文件;-m
参数可以选择repository
中的某一个特定的manifest
文件,如果不指定,则为默认的default.xml
文件。
repo sync
repo sync --force-sync # 强制同步整个仓库
checkout
到远程master
分支repo forall -c git checkout -b master remotes/origin/master
repo forall -c 'git clean -df; git checkout .'
repo status
repo forall -c git log --name-status --since="2017-02-12" --until="2017-03-01"
repo upload [project-list]
如上命令用于上传修改的代码。如果你本地的代码有所修改,那么在运行repo sync
的时候,会提示你上传修改的代码,所有修改的代码分支会上传到Gerrit
上,Gerrit
受到上传的代码,会转换为一个个变更,从而可以让人们来review
修改的代码。
repo diff [project-list]
用于显示提交的代码和当前工作目录代码之间的差异。
repo forall -c command
对所有的项目执行一个command
命令,这个命令相当好用。
配置文件以下面语句开头:
<?xml version="1.0" encoding="UTF-8"?>
整个文档由manifest
标签包裹,它是配置的顶层元素:
<manifest>
...
</manifest>
其中主要包含remote
、default
和project
三个元素:
remote
元素用于设定远程服务器的属性,可以为多个,其相关属性如下:
name
属性用于设置远程服务器名,用于git fetch
、git remote
等操作;alias
属性可以覆盖之前定义的remote name
,name
必须是固定的,但是alias
可以不同,可以用来指向不同的remote url
;fetch
属性是所有project
的git url
的前缀;review
属性用于指定gerrit
服务器,用于repo upload
操作;<remote name="origin" fetch="gerrit.dd.net" review="http://gerrit.dd.net"/>
default
元素用于设定所有project
的默认属性值:
remote
元素设定默认project
属性值;revision
属性你用于设置git仓库的分支名,如master
或refs/heads/master
;sync-j
属性设定sync操作时的并行线程数;sync-c
:如果设置为true,则只同步指定的分支(revision
属性指定),而不是所有的ref内容;sync-s
:如果设置为true,则会同步git的子项目;<default revision="master" remote="origin" sync-j="4" />
project
元素用于指定要clone
的git
仓库:
name
属性与remote
的fetch
属性一起拼接成项目的git
仓库的url
;path
属性指定clone
出来的git仓库在本地的路径,如果没有配置则与name
一样;remote
:定义remote name
,如果没有定义的话就用default
中定义的remote name
;resivion
属性用于指定获取git的提交点,可以是固定的branch
,也可以是明确的commit
哈希值;groups
:列出project所属的组,以空格或者逗号分隔多个组名;所有的projec
t都自动属于"all"组;每一个project
自动属于name:'name'
和path:'path'
组;例如,它自动属于default,name:monkeys,and path:barrel-of
组;如果一个project
属于notdefault
组,则:repo sync
时不会下载;sync_c
:如果设置为true,则只同步指定的分支(revision
属性指定),而不是所有的ref内容;sync_s
: 如果设置为true,则会同步git的子项目;upstream
:在哪个git分支可以找到一个SHA1
;用于同步revision
锁定的manifest
(-c
模式);该模式可以避免同步整个ref空间;annotation
:可以有0个或多个annotation
,格式是name-value
,repo forall
命令是会用来定义环境变量;<project path="fanxiao/fanxiaotest1" name="MA/Application/app-a" revision="master" />
<project path="fanxiao/fanxiaotest2" name="MA/Application/app-b" revision="52cf9185ff1d" />
<project path="fanxiao/fanxiaotest3" name="fanxiaotest" revision="master"/>
include
元素:
name
:另一个需要导入的manifest
文件名字;可以在当前的路径下添加一个another_manifest.xml
,这样可以在另一个xml
中添加或删除project
;remove-project
:从内部的manifest
表中删除指定的project
;经常用于本地的manifest
文件,用户可以替换一个project
的定义。有时候manifest
中还会包含manifest-server
元素。它的url
属性用于指定manifest
服务的URL
,通常是一个XML RPC
服务。它要支持一下RPC
方法:
GetApprovedManifest
(branch
, target
):返回一个manifest
用于指示所有projects
的分支和编译目标;target
参数来自环境变量TARGET_PRODUCT
和TARGET_BUILD_VARIANT
,组成$TARGET_PRODUCT-$TARGET_BUILD_VARIANT
GetManifest(tag)
:返回指定tag的manifest
在repo init
命令时,通过-m name.xml
来指定manifest
的名字,比如:
repo init -u https://github.com/AaronKonishi/repo-study.git -m manifest.xml
当不使用-m
指定manifest
时,默认使用default.xml
。
在default
元素中,可以为remote
指定默认的属性,其中的revision
可以指定默认的分支:
<default revision="master" remote="origin" sync-j="4" />
在具体的project
元素中,也可以使用revision
指定固定的分支,分支可以是tag
、branch
,或者某次固定的提交:
<project path="fanxiao/fanxiaotest1" name="MA/Application/app-a" revision="master" />
<project path="fanxiao/fanxiaotest2" name="MA/Application/app-b" revision="52cf9185ff1d" />
可以在*.xml
中指定多个remote
元素,但是只能有一个default
元素,然后在project
元素中,通过remote
属性指定要使用哪一个remote
的fetch
。比如:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="gitee" fetch="https://gitee.com/simpost/" />
<remote name="github" fetch="https://github.com/AaronKonishi/" />
<default revision="master" remote="github" />
<project path="source/git-repo" name="git-repo" remote="github" />
<project path="source/repo-study" name="repo-study" remote="github" />
<project path="source/EFSM" name="EFSM" remote="gitee" revision="master" />
</manifest>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。