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

news/2024/4/29 7:46:14/文章来源:https://blog.csdn.net/ansondroider/article/details/136260181

在这里插入图片描述

概述

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 _Initos.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-reporemote: 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 3772Receiving objects: 100% (8731/8731), 3.01 MiB | 10.66 MiB/s, done.Resolving deltas: 100% (6012/6012), done.fatal: manifest 'default.xml' not availablefatal: manifest default.xml not found================================================================================Repo command failed: UpdateManifestErrorUnable to sync manifest default.xml

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

    #download manifestsubuntu@SERVER4:/disk4/repoTest$ repo init -u git@192.168.7.3:manifestrepo: reusing existing repo client checkout in /disk4/repoTestrepo has been initialized in /disk4/repoTest#repo sync download all sourceubuntu@SERVER4:/disk4/repoTest$ repo syncFetching: 100% (2/2), done in 14.816sUpdating files: 100% (1050/1050), done.Checking out: 100% (2/2), done in 5.283srepo 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 服务器)

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

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

相关文章

【详细讲解PostCSS如何安装和使用】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d; 希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

Leetcode146. LRU 缓存

Every day a Leetcode 题目来源&#xff1a;146. LRU 缓存 解法1&#xff1a;哈希表 链表 代码&#xff1a; /** lc appleetcode.cn id146 langcpp** [146] LRU 缓存*/// lc codestart class LRUCache { private:unordered_map<int, list<pair<int, int>>:…

图解Kafka架构学习笔记(二)

kafka的存储机制 https://segmentfault.com/a/1190000021824942 https://www.lin2j.tech/md/middleware/kafka/Kafka%E7%B3%BB%E5%88%97%E4%B8%83%E5%AD%98%E5%82%A8%E6%9C%BA%E5%88%B6.html https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html https://feiz…

华为防火墙配置指引超详细(包含安全配置部分)以USG6320为例

华为防火墙USG6320 华为防火墙USG6320是一款高性能、高可靠的下一代防火墙,适用于中小型企业、分支机构等场景。该防火墙支持多种安全功能,可以有效抵御网络攻击,保护网络安全。 目录 华为防火墙USG6320 1. 初始配置 2. 安全策略配置 3. 防火墙功能配置 4. 高可用性配…

四种常用限流算法、固定窗口限流算法、滑动窗口限流算法、漏桶限流算法和令牌桶限流算法

什么是限流&#xff1f; 限流可以被视为服务降级的一种形式&#xff0c;其核心目标是通过控制输入和输出流量来保护系统。通常&#xff0c;一个系统的处理能力是可以预估的&#xff0c;为了确保系统的稳定运行&#xff0c;当流量达到预定的阈值时&#xff0c;必须采取措施限制进…

在宝塔面板中,为自己的云服务器安装SSL证书,为所搭建的网站启用https(主要部分攻略)

前提条件 My HTTP website is running Nginx on Debian 10&#xff08;或者11&#xff09; 时间&#xff1a;2024-3-28 16:25:52 你的网站部署在Debain 10&#xff08;或者11&#xff09;的 Nginx上 安装单域名证书&#xff08;默认&#xff09;&#xff08;非泛域名&#xf…

数据结构与算法(二)优先队列

数据结构与算法&#xff08;二&#xff09; 优先队列 一、优先队列的基本概念 我们的电脑总是运行着多个程序&#xff0c;电脑会给每个程序分配一个优先级&#xff0c;并首先执行下一个优先级更高的程序。在此情况下&#xff0c;可将其抽象为一个数据结构&#xff0c;该数据结构…

鸿蒙HarmonyOS开发-FA模型访问Stage模型DataShareExtensionAbility

无论FA模型还是Stage模型&#xff0c;数据读写功能都包含客户端和服务端两部分。 FA模型中&#xff0c;客户端是由DataAbilityHelper提供对外接口&#xff0c;服务端是由DataAbility提供数据库的读写服务。 Stage模型中&#xff0c;客户端是由DataShareHelper提供对外接口&…

【JavaEE】_Spring MVC项目获取URL中的参数

目录 1. 单参数 2. 多参数 1. 单参数 .java文件如下&#xff1a; package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*;import java.util.Arrays; import java.util.List;RequestMapping("/Para&…

SpringBoot Redis 之Lettuce 驱动

一、前言 一直以为SpringBoot中 spring-boot-starter-data-redis使用的是Jredis连接池&#xff0c;直到昨天在部署报价系统生产环境时&#xff0c;因为端口配置错误造成无法连接&#xff0c;发现报错信息如下&#xff1a; 一了解才知道在SpringBoot2.X以后默认是使用Lettuce作…

jmeter中参数加密

加密接口常用的方式有&#xff1a; MD5&#xff0c;SHA&#xff0c;HmacSHA RSA AES&#xff0c;DES&#xff0c;Base64 压测中有些参数需要进行加密&#xff0c;加密方式已接口文档为主。 MD5加密 比如MD5加密的接口文档&#xff1a; 请求URL&#xff1a;http://101.34.221…

【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析

一、引言 在机器学习项目中&#xff0c;数据探索是至关重要的一步。它不仅是模型构建的基础&#xff0c;还是确保模型性能稳定、预测准确的关键。数据探索的过程中&#xff0c;数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息&#xff…

linux中查看内存占用空间

文章目录 linux中查看内存占用空间 linux中查看内存占用空间 使用 df -h 查看磁盘空间 使用 du -sh * 查看每个目录的大小 注意这里是当前目录下的文件大小&#xff0c;查看系统的可以回到根目录 经过查看没有发现任何大的文件夹。 继续下面的步骤 如果您的Linux磁盘已满&a…

VScode中cmake调试

一般的cmake命令行测试方法&#xff1a; cmake -S . -B build cmake --build build ./build/cmake_debug 在vscode中使用图形化界面操作的方法 main.cpp #include <iostream>int main() {int num_a, num_b;num_a 10;num_b 20;std::cout << "num_a &qu…

TTS通用播放库技术设计

TTS音频播放库技术设计 目录介绍 01.整体介绍概述 1.1 项目背景介绍1.2 遇到问题1.3 基础概念介绍1.4 设计目标1.5 问题答疑和思考 02.技术调研说明 2.1 语音播放方案2.2 TTS技术分析2.3 语音合成技术2.4 方案选择说明2.5 方案设计思路2.6 文本生成音频 03.系统TTS使用实践 3…

CSS(六)

一、精灵图 1.1 为什么需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 因此&#xff0c;为了有效…

Vue挂载全局方法

简介&#xff1a;有时候&#xff0c;频繁调用的函数&#xff0c;我们需要把它挂载在全局的vue原型上&#xff0c;方便调用&#xff0c;具体怎么操作&#xff0c;这里来记录一下。 一、这里以本地存储的方法为例 var localStorage window.localStorage; const db {/** * 更新…

面试八股——Redis——分布式锁——Redisson

1.看门狗机制 注意看门狗机制&#xff1a;redisson会监听持有锁的线程&#xff0c;并每隔一段时间(releaseTime/3&#xff0c;默认releaseTime为30s)&#xff0c;如果线程还未释放锁的话&#xff0c;会给锁做一次续期。 2. 主从一致性 实际开发中我们会搭建多台redis服务器&a…

八大技术趋势案例(区块链量子计算)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

BOT攻击是什么,应当如何防护?

抢票失败、小程序崩溃、平台遭恶意灌水……这些我们日常都可能遇到过的问题的背后很有可能是BOT攻击在兴风作浪。对于企业用户来说&#xff0c;据相关调研显示&#xff0c;近八成企业都曾因BOT攻击而受到经济损失&#xff0c;而面对越来越复杂的BOT攻击&#xff0c;大多数企业表…