# manifest
**Repository Path**: hd_zhengzhou/manifest
## Basic Information
- **Project Name**: manifest
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-01
- **Last Updated**: 2025-03-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 简介
### 什么是repo
repo基于git 的工具,它用来管理多个git代码库。 其实git是一个非常不错的代码版本控制工具,具有分布式的优点,执行速度快。 但是随着代码规模的增大,把所有的代码用一个git库管理已经越来越力不从心。这个时候的一个很自然的思路就是分而治之,把整个project按模块分成一个个单独的git库,再用一个统一的工具管理,repo因此应运而生。
## 参考资料
1. [多仓库协同概览 – 阿里git客户端工具 (git-repo.info)](https://git-repo.info/zh_cn/docs/multi-repos/overview/)
2. 软件获取
1. 官方地址
[下载 – 阿里git客户端工具 (git-repo.info)](https://git-repo.info/zh_cn/download/)
2. 本地下载
- [git-repo-0.7.8-Windows-64.zip](software\git-repo-0.7.8-Windows-64.zip)
- [git-repo-0.7.8-Linux-64.tar.gz](software/git-repo-0.7.8-Linux-64.tar.gz)
## 安装git-repo
### win环境安装
将解压拿到的exe程序放入 `C:\Windows\git-repo.exe`路径即可,在cmd 或 git bash 中测试可用性。
### linux环境安装
#### 谷歌提供
但是往往由于墙的问题您无法使用谷歌提供的repo
```bash
apt install repo #debian ubuntu 等环境
```
#### 阿里提供repo
见[下载 – 阿里git客户端工具 (git-repo.info)](https://git-repo.info/zh_cn/download/)
#### 华为提供的repo工具
下述命令中的安装路径以"~/bin"为例,请用户自行创建所需目录。
```bash
mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
```
将repo添加到环境变量。
```bash
vim ~/.bashrc # 编辑环境变量
export PATH=~/bin:$PATH # 在环境变量的最后添加一行repo路径信息
source ~/.bashrc # 应用环境变量
```
## 工程拉取
通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。
- 从版本分支获取源码。可获取该版本分支的最新源码,包括版本发布后在该分支的合入。
```text
git-repo init -u ssh://git@${ip}:222/template/manifest.git -b master
git-repo sync -c
repo forall -c 'git lfs pull'
```
- 从版本发布Tag节点获取源码。可获取与版本发布时完全一致的源码。
```text
git-repo init -u ssh://git@${ip}:222/template/manifest.git -b V1.0
repo sync -c
repo forall -c 'git lfs pull'
```
**方式二**
通过repo + https 下载。
- 从版本分支获取源码。可获取该版本分支的最新源码,包括版本发布后在该分支的合入。
```bash
repo init -u http://${ip}:3000/template/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
- 从版本发布Tag节点获取源码。可获取与版本发布时完全一致的源码。
```bash
repo init -u http://${ip}:3000/template/manifest.git -b V1.0 --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
```
### 指定分组
只下载 指定仓库 或者 指定分组代码 请使用 `-g` 参数
```bash
repo init -u url -b master -g code --no-repo-verify
```
### 切换分组
```bash
repo init -m default.xml -g code,doc
repo sync
```
### 切换仓库分支
切换所有仓库的分支
```bash
repo start master --all
```
**Manifest元素**
最顶层的XML元素。 **remote元素** 设置远程git服务器的属性,包括下面的属性:
- name: 远程git服务器的名字,直接用于git fetch, git remote 等操作
- alias: 远程git服务器的别名,如果指定了,则会覆盖name的设定。在一个manifest中, name不 能重名,但alias可以重名。
- fetch: 所有projects的git URL 前缀
- review: 指定Gerrit的服务器名,用于repo upload操作。如果没有指定,则repo upload没有效果。
一个manifest文件中可以配置多个remote元素,用于配置不同的project默认下载指向。
**default元素** 设定所有projects的默认属性值,如果在project元素里没有指定一个属性,则使用default元素的属性值。
- remote: 之前定义的某一个remote元素中name属性值,用于指定使用哪一个远程git服务器。
- revision: git分支的名字,例如master或者refs/heads/master
- sync_j: 在repo sync中默认并行的数目。
- sync_c: 如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容。
- sync_s: 如果设置为true,则会同步git的子项目 Example:
```text
```
**project元素** 指定一个需要clone的git仓库。
- name: 唯一的名字标识project,同时也用于生成git仓库的URL。格式如下: ${remote_fetch}/${project_name}.git
- path: 可选的路径。指定git clone出来的代码存放在本地的子目录。如果没有指定,则以name作为子目录名。
- remote: 指定之前在某个remote元素中的name。
- revision: 指定需要获取的git提交点,可以是master, refs/heads/master, tag或者SHA-1值。如果不设置的话,默认下载当前project,当前分支上的最新代码。
- groups: 列出project所属的组,以空格或者逗号分隔多个组名。所有的project都自动属于"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: 可以有多个annotation,格式为name-value pair。在repo forall 命令中这些值会导入到环境变量中。
- remove-project: 从内部的manifest表中删除指定的project。经常用于本地的manifest文件,用户可以替换一个project的定义。
- 子元素
```text
Project元素下面会有两个子元素。Copyfile和linkfile
Copefile:复制,cp src dest
Linkfile:软链接 ,ln -s src dest
Example:
```
**Include元素** 通过name属性可以引入另外一个manifest文件(路径相对与manifest repository’s root)。