Linux repo基本用法: 搭建自己的repo仓库[服务端]

在这里插入图片描述

概述

Repo的使用离不开Git, Git 和 Repo 都是版本控制工具,但它们在使用场景和功能上有明显区别…

Git

  1. 定义:Git 是一个分布式的版本控制系统,由 Linus Torvalds 为 Linux 内核开发而设计,现已成为世界上最流行的版本控制软件之一。
  2. 功能:Git 能够高效地追踪文件和目录的历史变更,支持分支和合并、提交历史记录、回滚更改、解决冲突等功能。它允许开发者在本地创建仓库并进行完整的版本控制操作,包括克隆、添加、提交、推送、拉取、合并等。

Repo

  1. 定义:Repo 是 Google 开发的一个高级工具,它是基于 Python 编写的一个脚本集合,主要用来管理和协调多个 Git 仓库的工作。
  2. 功能:Repo 主要针对大型项目,特别是那些包含了大量相互依赖的子模块或者子项目的工程,如 Android 开源项目 (AOSP)。Repo 可以简化对这些子仓库的初始化、同步、分支管理、提交以及推送等操作。它通过 manifest 文件来描述所有子项目的配置和依赖关系,从而提供了一种在顶层统一管理多个 Git 仓库的方法。

总的来说,

  • Git 是单个项目的版本控制系统。
  • Repo 是在 Git 之上构建的工具,用于大规模分布式开发环境中的多仓库协同管理。

使用 Repo 的好处在于能够方便地同时处理和同步多个相关联的 Git 仓库,简化复杂项目中跨仓库的日常版本控制任务。

使用REPO

国内的环境建议用mirrors.tuna.tsinghua.edu.cn 镜像

  • 下载

    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
    chmod +x repo
    

    为了方便可以将其拷贝到你的PATH里。

    更新

    repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc

    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

    并重启终端模拟器。

  • 同步/更新

    repo sync [project0 project1 ... projectn]
    repo sync [/path/to/project0 ... /path/to/projectn]
    
  • 初始化/init

    repo init -u url [options]
    

    在当前目录中安装 Repo。此命令会创建一个 .repo/ 目录,其中包含存放 Repo 源代码和标准 Android 清单文件的 Git 代码库。

    选项:

    • u:指定从中检索清单代码库的网址。常见清单位于 https://android.googlesource.com/platform/manifest
    • m:选择代码库中的清单文件。如果未选择清单名称,则默认为 default.xml
    • b:指定修订版本,即特定的 manifest-branch

    注意对于所有剩余的 Repo 命令,当前的工作目录必须是 .repo/ 的父目录或该父目录的子目录。

    当输入空的URL初始化, 报错. python 改为 python3 即可

    
    ubuntu@SERVER4:/disk4/repoTest$ repo init
    Downloading Repo source from https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
    remote: Enumerating objects: 8731, done.
    remote: Counting objects: 100% (4959/4959), done.
    remote: Compressing objects: 100% (2487/2487), done.
    remote: Total 8731 (delta 4744), reused 2472 (delta 2472), pack-reused 3772
    Receiving objects: 100% (8731/8731), 3.01 MiB | 4.60 MiB/s, done.
    Resolving deltas: 100% (6011/6011), done.
    Traceback (most recent call last):
      File "/home/user/bin/repo", line 1490, in <module>
        main(sys.argv[1:])
      File "/home/user/bin/repo", line 1440, in main
        _Init(args, gitc_init=(cmd == "gitc-init"))
      File "/home/user/bin/repo", line 691, in _Init
        os.rename(dst, dst_final)
    OSError: [Errno 39] Directory not empty: '/disk4/repoTest/.repo/repo.tmp' -> '/disk4/repoTest/.repo/repo'
    

搭建Repo仓库(服务端)

  1. 搭建基于gitolite的GIT服务器 192.168.7.3
  2. 默认创建的几个git仓库
    • 2.1. gitolite-admin : 用于管理git仓库和用户秘钥 [自动创建]

    • 2.2. manifest: 特殊Git仓库, repo通过此项目来获取仓库, 它包含了项目的清单(manifest)文件。仓库任意名称[手动创建]

      default.xml 或者 manifest.xml 这是最重要的文件之一,定义了项目树状结构、各个子项目的URL、分支、标签以及其他同步策略等信息。每个项目对应一个 <project> 标签,并且包含项目路径、git仓库URL等属性

      groups.xml:可能存在的文件,用于定义不同的项目组,以便于根据开发团队的不同需求或者权限来下载不同的子项目集合。

      other-manifests/ 目录: 该目录下可能有多个针对不同构建目标或版本的manifest文件,如 android-9.0.0.xml 等。

    • 2.3. test: 测试项目 [自动创建]

  3. 配置repo的manifest: 只需要一个文件- default.xml
    • default.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <manifest>
        <remote name="codes" fetch="."/>
        
        <default remote="codes" sync-j="4"/>
        
        <project name="project_1" revision="master"/>
        <project name="project_2" revision="master"/>
      </manifest>
      

      manifest文件定义了这些仓库的基本布局和同步规则。配置含义如下:

  • <remote name="codes" fetch="."/>:定义了一个远程仓库,名字叫做codes,其fetch地址为.。这里的.代表当前目录,意味着所有的项目都位于本地同一个父目录下,不需要从远程服务器拉取代码。
  • <default remote="codes" sync-j="4"/>:设置默认的远程仓库为刚刚定义的codes,并且设置了sync-j属性为4,这意味着在执行repo sync命令时,将会并发运行4个jobs(任务)来并行拉取和更新各个项目。
  • <project name="project_1" revision="master"/>:定义了一个名为project_1的项目,其对应的Git仓库的分支或者提交哈希为master,repo会在同步时检查并确保该项目处于master分支的最新状态。
  • <project name="project_2" revision="master"/>:类似地,定义了另一个名为project_2的项目,同样指向master分支。

      文件描述了一个由两个Git项目(project_1project_2)组成的代码仓库集合,它们都将从本地的codes远程仓库同步,并且在同步时默认使用master分支,并且同步过程可以并发执行四个任务以提高效率。

  1. 客户端下载同步
    刚开始使用的文件名称: manifest, 导致报错: 'default.xml’ not available
        Downloading Repo source from https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
        remote: Enumerating objects: 8731, done.
        remote: Counting objects: 100% (4959/4959), done.
        remote: Compressing objects: 100% (2487/2487), done.
        remote: Total 8731 (delta 4745), reused 2472 (delta 2472), pack-reused 3772
        Receiving objects: 100% (8731/8731), 3.01 MiB | 10.66 MiB/s, done.
        Resolving deltas: 100% (6012/6012), done.
        fatal: manifest 'default.xml' not available
        fatal: manifest default.xml not found
        ================================================================================
        Repo command failed: UpdateManifestError
        	Unable to sync manifest default.xml

指定清单: repo init git@192.168.7.3:RepoTest -m other_manifest.xml

    #download manifests
    ubuntu@SERVER4:/disk4/repoTest$ repo init -u git@192.168.7.3:manifest
    repo: reusing existing repo client checkout in /disk4/repoTest
    
    repo has been initialized in /disk4/repoTest
    
    #repo sync download all source
    ubuntu@SERVER4:/disk4/repoTest$ repo sync
    Fetching: 100% (2/2), done in 14.816s
    Updating files: 100% (1050/1050), done.
    Checking out: 100% (2/2), done in 5.283s
    repo sync has finished successfully.

附录(仅供参考)

服务端文件结构:

$ sudo ls -l /home/git/repositories/
total 172
drwx------ 7 git git 4096 219 15:14 project_1.git
drwx------ 7 git git 4096 219 15:14 project_2.git
drwx------ 7 git git 4096 219 15:14 RepoTest.git
drwx------ 7 git git 4096 219 15:14 manifest.git
drwx------ 7 git git 4096 219 15:14 test.git
$ tree RepoTest/
	RepoTest/
	├── other_manifest.xml
	└── default.xml

客户端文件

$ tree -L 1 -a RepoTest/
	RepoTest/
	├── project_1
	├── project_2
	└── .repo
	    ├── copy-link-files.json
	    ├── manifests
		    │   ├── other_manifest.xml
		    │   ├── default.xml
		    │   └── .git -> ../manifests.git
	    ├── manifests.git
	    ├── manifest.xml
	    ├── project.list
	    ├── project-objects
	    ├── projects
	    ├── repo
	    ├── .repo_fetchtimes.json
	    ├── .repo_localsyncstate.json
	    └── TRACE_FILE

常见错误

  • ‘NoneType’ object has no attribute 'rstrip’ : 检查manifest配置, 非python错误

    repo sync
    ================================================================================
    Repo command failed: RepoUnhandledExceptionError
    	'NoneType' object has no attribute 'rstrip'
    

参考

repo使用总结—从入门到入门
Repo实践指南
repo:从零开始搭建repo环境
搭建支持 Repo 的 Android 源码镜像(Repo 服务器)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/498601.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 基础命令集详解

目录 一、string 类型及操作 二、hash 类型及操作 三、list 类型和操作 四、set 类型及操作 五、zset类型及操作 六、其他相关命令 一、string 类型及操作 string是最简单的类型&#xff0c;一个key对应一个value&#xff0c;string类型是二进制安全的。redis的string可以…

硬件9、常用PCB封装的直接调用

拷贝过来之前的封装&#xff08;适用于之前的项目创建过项目的&#xff0c;可以多个&#xff09; ctrlA全选&#xff0c;然后ctrlc进行全部复制 然后切换到要使用的封装库里面进行粘贴 复制 在其他库文件中粘贴 单独复制一个封装 在PCB中使用ctrlc进行复制 切换到库中&…

保理业务风险评级及尽调

企业评级的作用 对核心企业进行评级&#xff0c;是为了初步判断核心企业&#xff08;买方&#xff09;的基本状况&#xff0c;确保开展业务后核心企业&#xff08;买方&#xff09;的还款能力&#xff1b;对融资企业&#xff08;卖方&#xff09;进行评级&#xff0c;是为了判…

消息队列经典应用场景

笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。 在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章,笔者结合自己的真实经历,和大家分享消息队列的七种经典应用场景。 1 异步&解耦 笔者曾经负责某电…

SIP-6002D对讲终端使用说明 SIP对讲求助终端

SIP对讲终端SIP-6002D双按键是一款采用了ARMDSP架构&#xff1b;配置了麦克风输入和扬声器输出&#xff0c;SIP-6002D带两路寻呼按键&#xff0c;可实现SIP对讲功能&#xff0c;作为SIP对讲的终端&#xff0c;主要用于银行、部门机构、调度室、化工厂、钢铁厂、矿井、风电等场所…

彩信群发为奢侈品行业带来了哪些性化体验与互动?

彩信群发作为一种创新的营销手段&#xff0c;为奢侈品行业带来了诸多个性化体验与互动的机会。以下是一些具体的体现&#xff1a; 首先&#xff0c;彩信群发为奢侈品品牌提供了丰富的创意展示空间。通过嵌入高质量的图片、短视频和音频&#xff0c;品牌可以全方位、多角度地展示…

Vue——高德地图

1.官网上需要注册并登录高德地图开放平台&#xff0c;申请密钥&#xff08;如图1&#xff09;。(高德地图官网)选择Web端&#xff0c;添加成功后&#xff0c;可以获取到&#xff08;图2&#xff09;key和密钥 2.Vue项目终端安装地图加载包 npm i amap/amap-jsapi-loader --s…

6.二叉树——3.搜索树

二叉搜索树BST的特色 左<根<右中序序列有序 二叉搜索树构造 树为空&#xff0c;新结点作为根树不空&#xff0c;新结点与树根比大小 大往右走&#xff0c;小往左走 新结点插入空位 例题 代码 #include <cstdio> #include <string> #include <map>…

目标检测——交通专用车辆数据集

一、重要性及其意义 目标检测在交通管理领域&#xff0c;特别是在交通专用车辆数据集的构建上&#xff0c;具有显著的重要性和深远的意义。以下是对其重要性及其意义的详细探讨&#xff1a; 提升交通管理效率&#xff1a;通过精准的目标检测&#xff0c;交通管理部门可以迅速识…

regexp_substr()

1、基本语法 REGEXP_SUBSTR(String, pattern, position,occurrence, modifier) String&#xff1a;需要进行处理的字符串。 pattern&#xff1a;正则表达式。 position&#xff1a;起始位置&#xff08;从字符串的第几个开始&#xff0c;默认为1&#xff0c;注&#xff1a;…

基于springboot实现社区团购系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现社区团购系统演示 摘要 本课题是根据用户的需要以及网络的优势建立的一个社区团购系统&#xff0c;来满足用户团购的需求。 本社区团购系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于Spring Boot框架开发。在网站的整个开发过程中&…

短剧APP搭建必备技巧大揭秘

在当今数字化时代&#xff0c;随着人们对视频内容的需求不断增长&#xff0c;短剧APP成为一种备受关注的新兴形式。短剧APP提供了一个平台&#xff0c;让用户可以快速、便捷地浏览各种精彩的短剧内容&#xff0c;吸引了大批年轻用户的关注。短剧APP的搭建不仅可以满足用户对短剧…

JAVA面试八股文之集合

JAVA集合相关 集合&#xff1f;说一说Java提供的常见集合&#xff1f;hashmap的key可以为null嘛&#xff1f;hashMap线程是否安全, 如果不安全, 如何解决&#xff1f;HashSet和TreeSet&#xff1f;ArrayList底层是如何实现的&#xff1f;ArrayList listnew ArrayList(10)中的li…

Coursera自然语言处理专项课程03:Natural Language Processing with Sequence Models笔记 Week02

Natural Language Processing with Sequence Models Course Certificate 本文是https://www.coursera.org/learn/sequence-models-in-nlp 这门课程的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Natural Language Processing with Sequence ModelsWeek 02…

eclipse导入svn项目

1、配置maven和jre 2、用svn引入项目, 3一直点击next,到最后选完成。 4、从svn引入成功后&#xff0c;右键项目名点delete&#xff0c;弹窗出现的框不选&#xff0c;然后再import,点maven,点(existing maven projects)已存在maven项目&#xff0c;选择该文件等待引入完成…

免费VPS/云服务器整理汇总

随着互联网的普及和云计算技术的飞速发展&#xff0c;越来越多的人开始尝试使用VPS&#xff08;Virtual Private Server&#xff0c;虚拟专用服务器&#xff09;或者云服务器来部署自己的在线业务。本文将对免费VPS/云服务器进行整理汇总&#xff0c;助力大家轻松开启云计算之旅…

硬件7、AD设置封装如何画IC芯片以及芯片的散热引脚

首先查看引脚的尺寸&#xff0c;引脚的宽度为b&#xff0c;选择b的Max&#xff1a;0.5mm&#xff0c;然后计算引脚的长度&#xff1a;(E-E1)/2&#xff0c;也就是(6.1-3.95)/2约等于1mm&#xff0c;填写参数可以填1.2mm&#xff0c;尽量大一点 可以看到两个引脚的中心点在水平…

【物联网】Qinghub opc-ua 连接协议

基础信息 组件名称 &#xff1a; opcua-connector 组件版本&#xff1a; 1.0.0 组件类型&#xff1a; 系统默认 状 态&#xff1a; 正式发布 组件描述&#xff1a;通过OPCUA连接网关&#xff0c;通过定时任务获取OPCUA相关的数据或通过执行指令控制设备相关参数。 配置文件&a…

刷题之动态规划

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的题目了&#xff0c;要特别注意初始化的时候给什么值。 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么->dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是…

JimuReport积木报表 v1.7.4 公测版本发布,免费的JAVA报表工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…