Repo 是建立在Git上的一个多仓库管理工具,可以组织多个仓库的上传和下载。Repo是Google用Python脚本写的调用Git的脚本,主要帮助我们管理多个Git存储仓库,将其上传到我们的版本控制系统,并自动执行Android开发工作流程的某些部分。Repo并不是要取代Git,而是为了在Android环境下更加方便的使用Git。下面来看看Repo的具体用法吧!
安装Repo
在安装Repo时,必须先要确保已经安装了Git工具,以及Python2.7+的环境,下面是在Mac下安装的流程:
1、确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
mkdir~/bin
PATH=~/bin:$PATH
2、下载 Repo 工具,并确保它可执行:
curlhttps://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
Windows下没有curl工具可以下载,地址是 https://curl.se/windows/dl-7.74.0_2/curl-7.74.0_2-win64-mingw.zip 。不过也可以直接访问 https://storage.googleapis.com/git-repo-downloads/repo 网址,直接把内容复制到~/bin/repo效果是一样的。另外如果googleapis.com无法访问的话也可以替换为Github的Repo地址:
curlhttps://raw.githubusercontent.com/esrlabs/git-repo/stable/repo > ~/bin/repo
对于Linux安装过程可以参考 https://github.com/esrlabs/git-repo 这个仓库的README其实说得很清楚了。
Repo的背景
使用Repo之前,最好先熟悉Git,关于Git的推荐资料: https://git-scm.com/book/zh/v2 。其实Repo最开始是用来管理Android源代码库的,Android 源代码位于由 Google 托管的 Git 代码库中。Git 代码库中包含 Android 源代码的元数据,其中包括与对源代码进行的更改以及更改日期相关的元数据。而且Android版本库众多,版本库太大以及Git不能部分检出,如果所有的东西都放在一个库中,而某个开发团队比较关心可能只是某个小组件或者插件而已,但是却要下载如此庞大的版本库,所以这一切交给了Repo去管理。
那么Repo如何管理多个代码仓库的呢?
Repo的组成
Repo主要包括两部分:Repo引导脚本(Google 称之为Repo launcher)和Repo命令的主体部分。那么Repo仓库究竟有些什么东西呢,在我们初始化Repo仓库之后,会出现一个.repo的文件夹,里面有如下内容:
changlinzou@macwork%tree.repo-L1.repo├──manifest.xml->manifests/default.xml├──manifests├──manifests.git├──project-objects├──project.list├──projects└──repo5directories,2files
当执行repo init命令来初始化仓库的时候首先执行的就是Repo的引导脚本,该脚本会到我们指定的地方去下载Manifest 仓库,以及Repo命令主体部分。下载好之后就放在当前目录下面的.repo目录下,其中:
对于Manifests文件相信每一个Android开发中都不陌生,Android项目中Manifests声明了四大组件,就像列出的项目组件的清单一样。所以其实很容易类比,在这里manifests是清单文件的git仓库,这些xml文件中包含了各个git project的名称,检出的reversion,检出到哪个目录等等信息。Repo就是利用这些manifest文件去分别获取各个project,比如这样一个manifest文件:
<manifest><remotename="origin"fetch="https://github.com/"review="https://github.com/"/><defaultremote="origin"revision="master"sync-j="4"/><projectname="xxx_projects/first.git"path="xxx"/><projectname="yyy_projects/first.git"path="yyy"/><projectname="zzz_lib/first.git"path="xxx/zzz_lib"/>......