以windows为例
1.下载git,python并安装
2.在指定目录下下载repo
# 假设你在项目目录 /d/my-project
cd /d/my-project
# 下载 repo 到当前目录
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
结束后执行repo --version查看,如果出现/usr/bin/env: 'python3': Permission denied,
修改 /d/my-project/repo,把第一行#!/usr/bin/env python3改为#!/usr/bin/env python
3.准备清单文件,新建一个git库,存放一个default.xml,上传
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- 定义所有仓库共同的远程服务器地址 -->
<remote name="origin" fetch="git@github.com:my-org/" />
<!-- 定义默认的分支和远程源 -->
<default remote="origin" revision="main" />
<!-- 定义两个仓库,path 是本地存放路径,name 是仓库名,revision指定分支 -->
<project path="services/backend" name="backend.git" revision="master"/>
<project path="services/frontend" name="frontend.git" revision="develop" />
</manifest>
4.另找一个目录,初始化repo工作区
/*使用default.xml*/
repo init -u git@github.com:my-org/my-manifest.git
/*指定xml*/
repo init -u <你的清单仓库URL> -b <分支名> -m <你的清单文件名>.xml
/*
repo工具默认会从 https://gerrit.googlesource.com/git-repo/ 下载它自己需要的组件,而这个地址在国内无法直接访问
*/
repo init -u git@github.com:my-org/my-manifest.git \
--repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/ \
--no-repo-verify
5.使用repo sync同步拉取代码
如果调整了xml,需要重新执行4.5步骤
上述示例仓库来自同一个平台,repo也可以同时配置来自不同平台的仓库,示例为Gitee 和 GitCode 两个不同平台。
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- 定义 Gitee 的远程服务器 -->
<remote name="gitee"
fetch="https://gitee.com/"
review="https://gitee.com/" />
<!-- 定义 GitCode 的远程服务器 -->
<remote name="gitcode"
fetch="https://gitcode.net/"
review="https://gitcode.net/" />
<!-- 设置默认属性:默认使用 gitee 远程源,分支为 main -->
<default remote="gitee" revision="main" sync-j="4" />
<!-- 从 Gitee 拉取的仓库 -->
<project path="vendor/common"
name="your-org/common-lib.git"
remote="gitee"
revision="main" />
<project path="app/module-a"
name="your-org/module-a.git"
remote="gitee"
revision="develop" />
<!-- 从 GitCode 拉取的仓库 -->
<project path="vendor/special"
name="special-org/special-lib.git"
remote="gitcode"
revision="master" />
<project path="app/module-b"
name="special-org/module-b.git"
remote="gitcode"
revision="release/v1.0" />
</manifest>