从零开始搭建repo 与使用

本文介绍了如何使用repo工具在服务端和客户端搭建仓库管理。repo是一个基于Git的工具,简化了大型项目中多个子系统的版本控制。在服务端,只需创建一个manifest仓库和XML配置文件指定所需子仓库。客户端则需要安装repo,通过repoinit和sync命令同步项目。repo的工作原理是根据XML文件中的指引下载远程仓库。
摘要由CSDN通过智能技术生成

从零开始搭建repo 与使用

一、repo 简介

在一个大型项目中,一般会拆成多个子系统来分开管理,每一个子系统都对应着一个git仓库。但在拉取整个项目的时候就需要一个一个去拉取仓库,或者要写一个shell脚本去拉取,这样做可以,但略显笨拙。于是repo来拯救了我们,r它是一个建立在git上的工具,本质其实是一个Python脚本,所以需要安装Python,像Android这样的系统也是用repo来管理的。

二、repo服务端的搭建

首先,在服务端只需要建立一个仓库名为manifest,我这里使用的是gitee(使用自己搭建的git服务器也是一样的)

image-20220722234127950

然后可以git clone到本地来操作。

image-20220722234759143

manifest中,创建一个.xml文件,该文件就决定了需要下载哪些仓库,如我创建了一个game.xml文件

image-20220722235230490

然后在其中输入:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote  name="gitee"
           fetch="https://gitee.com/chensmart" />
  <default revision="master"
           remote="gitee" sync-j="2" />
  <project path="data" name="game" revision="master" />
</manifest>
  • remote: 远程服务端,namerepo仓库名称,fetch 为 仓库url

  • default:设置每个项目默认的仓库和分支,remote指定了使用哪一个远程服务端

  • project: 每个项目的git仓库,path会指向下载后的仓库放在那个路径

  • name: 服务端git仓库名称,指向的是在fetch在已有的仓库名。

  • revision: 分支名称或者commit id

完成之后就提交上去。

image-20220723000948321

到此,服务端的任务就完成了,其实在服务端就是建了一个仓库而已,然后在其中创建了一个xml文件,并在其中指定了需要的仓库。

三、repo客户端的搭建

首先在客户端我们就需要安装repo的应用:

sudo snap install git-repo

使用自带源下载的repo会出问题,所以我们使用以下的方法

mkdir ~/bin
PATH=~/bin:$PATH
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
cd git-repo/
cp repo ~/bin/
chmod a+x ~/bin/repo

这样在后续的使用中就不会出问题(血泪的教训啊)

然后,创建一个文件夹下载我们仓库,在其中使用repo初始化命令:

repo init -u https://gitee.com/chensmart/manifest -b master -m game.xml
  • -u(–manifest-url):设定清单库的Git服务器地址
  • -m(–manifest-name):当有多个清单文件时,指定清单库中的某个清单为有效的清单文件。默认为default.xml
  • -b(–manifest-branch):选择一个maniest仓库中的一个特殊的分支

然后输入用户名和密码

image-20220723092558427

现在文件夹下就有了.repo文件夹,repo init主要完成了如下操作:

  1. 完成repo工具的完整下载,现有的不过是repo的引导程序。初始化操作会从repo脚本里设定的镜像地址中克隆repo.git库到当前的目录下的.repo文件夹中。
  2. 克隆创建的清单库manifest.git,也就是我们在服务端创建的仓库,里面game.xml文件是repo工作的指引文件。

最后同步就是同步项目了,把manifest.git中的清单文件game.xml中所指引的仓库下载下来。

repo sync

image-20220723094245563

经过同步,指定仓库中的内容就可以下载下来了。

如果某个仓库同步过,repo sync就相当于git clone操作,把对应的远程仓库拷贝到本地来。

如果工程已经同步过,repo sync就相当于git remote update git rebase origin/branch

四、总结

其实repo的搭建并不复杂,服务端只需要建立一个仓库即可,而客户端就安装repo工具,对服务器和原项目不需要有多大的改动。

原理也很简单,其实就像一个shell脚本,通过.xml文件里的指引,把remotefetchprojectname组合起来就是一个仓库的链接,然后通过该链接去下载对应的仓库而已。当然,repo还有其他的功能如使用linkfile可以在同步完成后创建链接,还有其他功能,这些就有待读者去发掘了。

jectname组合起来就是一个仓库的链接,然后通过该链接去下载对应的仓库而已。当然,repo还有其他的功能如使用linkfile`可以在同步完成后创建链接,还有其他功能,这些就有待读者去发掘了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘭噗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值