使用Repo管理代码库依赖
11 Oct 2017至于为什么不用git submodule
来管理代码库依赖,主要还是因为git submodule
的坑太多了,需要对 git 有足够的经验还能驾驭好。各位可以参考如下文章:
创建 Repo 项目
Why your company shouldn’t use Git submodules
所以我们决定使用 Repo 来管理代码库依赖
-
安装 Repo
brew install repo
-
创建 Repo 项目
Repo 项目是基于 Manifest 文件的,一般会为 Manifest 建立一个独立的 Git 仓库,在这个仓库中保持一个命名为
default.xml
的项目描述文件,这个文件名是固定的。 -
编写项目描述文件
一个简单的
default.xml
文件内容:<?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="origin" fetch=".." review="http://ip:port/" /> <default revision="master" remote="origin" sync-j="4" /> <project path="proj1" name="proj1.git" /> <project path="proj2" name="proj2.git" /> </manifest>
-
对 Manifest 的管理
对 Manifest 的管理与 gitosis 很类似,repo 库中出了包含项目 git 库外,同时包含了项目管理 git 库(名称固定为
manifests
,位于.repo
目录中),就是前面我们存放default.xml
的那个独立库。当需要修改 Repo 项目配置的时候,可以进入到这个 git 库中,接着如操作一个普通的 git 库一样修改、提交。.repo 目录结构大概是这样子的:
.repo_fetchtimes.json manifest.xml -> manifests/default.xml manifests manifests.git project-objects project.list projects repo
如果你能具体看一下各文件夹内容的,就会发现,里面包含了所有项目的裸库和项目列表。
-
关于
repo init -b
可以使用 repo init -b [branch]
来拉取不同的分支,这是如何做到的呢?
只需在manifests
管理仓库中建立相应的branch`即可,比如,我们在
manifests
仓库中建立一个
develop
分支,并且配置了不同的
default.xml
文件。接着就可以使用
repo init -b develop
``来签出相应的 repo 分支了。
与Gerrit 集成
使用Repo工作
-
拉取项目
mkdir folder cd folder repo init -u ssh://[email protected]:port/ProjectManifest.git --repo-url https://github.com/xlncz/mirror-git-repo.git
注意上述命令中的
—repo-url
是一个我搭建在 github 上的的 google 镜像库,否则会直接向 GOOGLE 请求更新 Repo 工具。其他备用的镜像库:
https://code.csdn.net/kangear/git-repo.git
-
建立分支
repo start master —all
master
为分支名,根据需要可建立不同的分支名 -
查看当前分支
repo branch
可能的输出:
* master | in all projects
-
帮助文档
在使用过程中可随时调出某个命令的帮助文档:
repo help upload
更多关于 Repo 命令的使用可以查阅 这里