1. 项目清单库
<manifest>
<remote fetch="ssh://10.XX.XX.XX" name="origin" review="10.XX.XX.XX:8090"/>
<default remote="origin" revision="develop" sync-j="4"/>
<project groups='all' name="XXX/XXX" path="XXX/XXX" remote="origin" revision="develop">
<linkfile dest="XX/XX/" src="../.."/>
<copyfile dest="XX/XX/XX.txt" src="./xx.txt"/>
</project>
<project name="XXX/repohooks" path="XXX/XXX" remote="origin" revision="develop"/>
<repo-hooks enabled-list="post-sync" in-project="XXX/repohooks"/>
</manifest>
-
<remote>:描述了远程仓库的基本信息。
name:远程仓库的名称,通常我们看到的命名是origin
fetch:git库地址
review:用作code review的server地址
-
<default>:default标签定义的属性,将作为<project>标签的默认属性,在<project>标签中,也可以重写这些属性。
revision:默认分支
remote:默认的远程版本库名称
sync-j:表示在同步远程代码时,并发的任务数量
-
<project>:每一个repo管理的git库,就是对应到一个<project>标签
path:把代码下载到指定目录下
name:该项目远程版本库的相对路径
groups:该项目远程版本库所属组
revision:单独指定分支
remote:单独指定远程版本库名称
-
<project><copyfile>:project元素下的子元素copyfile,定义clone后从src到dest拷贝操作。
-
<project><linkfile>:project元素下的子元素linkfile,定义clone后dest到src的软连接。
-
<repo-hooks>:repo钩子,in-project下面应该有一个与钩子同名的python文件。因此,如果您想支持预上传钩子,您需要创建一个名为post-sync.py的文件。Repo将在处理钩子时动态加载该模块,然后调用其中的主函数。
in-project:定义挂钩的项目。该值必须与先前定义的元素的
name
属性(而不是属性)匹配。enabled-list:要使用的钩子列表,空格或逗号分隔。
2.repo脚本库
repo对git命令进行了封装,提供了一套repo的命令集(包括init, sync等),所有repo管理的自动化实现也都包含在这个git库中。在第一次初始化的时候,repo会从远程把这个git库下载到本地。在repo的引导脚本中指定了repo脚本库的地址。
。。。。
3.repo常用命令
1.repo init 初始化
repo init -u <URL> [<OPTIONS>]
-
-u:指定manifest项目清单库地址。
-
-m,–manifest-name:指定manifests库中的清单文件,默认为maniftests/default.xml。
-
-b, –manifest-branch:指定manifest仓的分支,默认为master分支。
-
-g:指定manifests库中的组来下载代码,默认为all。
不常用参数:
-
–repo-url:指定远程repo库地址,当引导脚本中的地址不可访问时,可以通过该参数指定可访问的repo地址。
-
–repo-branch:同manifest这个git库一样,repo这个git库也是有版本差异的,可以通过该参数来指定下载repo这个远程git库的特定分支。
-
–no-repo-verify:在下载repo库时,会对repo的源码进行检查。通过–repo-url指定第三方repo库时,可能会导致检查不通过,所以可以配套使用该参数,强制不进行检查。
-
--depth {number}:限制下载记录次数,加速代码下载。
2.repo sync 同步代码
repo sync [PROJECT_LIST]