Repo管理

news/2024/12/17 16:02:25/

文章目录

  • 前言
  • Repo介绍
  • 清单仓库
    • 清单仓库的组成
  • 初始化Repo
  • 同步远程仓库
  • Repo实际应用

前言

我们知道,Git是用来管理某一个仓库,那当一个项目用到了多个仓库时,怎么来同步管理这些仓库呢?这个时候就可以引入Repo管理。

Repo介绍

Repo工具最初由Google开发,目的是为了简化和协调众多子项目的版本控制和协作过程。它被广泛用于Android操作系统的开发过程中,用于管理数以百计的Git仓库。通过Repo,开发者可以在单个工作目录中管理多个Git仓库,这些仓库可以相互依赖,但保持独立的版本控制。

清单仓库

我们从“清单仓库(Manifests Repo)”来切入Repo的学习。清单仓库本质上是一个 Git 仓库,但它的作用并不是存储项目代码,而是用来描述项目的整体结构及其子仓库的组织方式。通俗的说,清单仓库用来告诉Repo工具:你的项目需要哪些代码仓库、每个代码仓库在哪里可以找到、每个代码仓库该放在哪个文件夹里、每个代码仓库用哪个版本。

用一张图来更清晰的了解“清单仓库”的定位:

画板

可以看到,清单仓库和其它代码仓库是同一个等级的,只不过清单仓库里储存的是如何管理A~G仓库的文件。所以在一个使用repo管理的项目中,一定有一个清单仓库。

清单仓库的组成

一个典型的清单仓库包含以下内容:

  • manifest.xml:核心文件,定义项目所有子仓库的布局和版本信息。
  • manifests/ 文件夹:存放多个 XML 文件,每个文件对应不同版本或配置的项目结构。
  • .repo/ 文件夹:Repo 在初始化时生成,用于存储管理信息。

以下是一个manifest.xml文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<manifest><remote name="origin" fetch="https://example.com/git/" /><default remote="origin" revision="main" /><project name="kernel" path="src/kernel" dest-branch="develop" revision="v5.10" /><project name="uboot" path="src/uboot" revision="2023.01" /><project name="tools" path="src/tools" />
</manifest>

解释:

  1. remote 节点:定义远程仓库地址。
    • name="origin" 表示远程仓库名称。
    • fetch="https://example.com/git/" 指定仓库的基础 URL,所有子仓库的代码都从这里拉取。
  2. default 节点:定义默认属性。
    • remote="origin" 指定默认的远程仓库。
    • revision="main" 表示默认使用的分支。
  3. project 节点:定义每个子仓库的信息。
    • name 表示子仓库名称。
    • path 表示子仓库克隆后在本地的存放路径。
    • revision 表示子仓库对应的分支或标签或提交哈希。

举例:

<project name="kernel" path="kernel/5.10" dest-branch="develop" revision="v5.10" />

所以实际拉取的地址和分支是:

  1. 仓库克隆地址:https://example.com/git/kernel
  2. 目标分支:develop-4.9(根据 dest-branch 配置)
  3. 代码版本:v5.10(根据 revision 配置)

同时,将拉下来的仓库存放到了当前目录下的kernel/5.10文件夹下。

初始化Repo

repo init -u https://example.com/git/manifests.git -b linux -m manifest.xml

解释:

  • -u https://example.com/git/manifests.git:指定清单仓库的 URL,manifests.git 就是清单仓库。
  • -b linux:指定你想要初始化的分支,linux 是你清单仓库中的分支,Repo 会基于这个分支拉取配置。
  • -m manifest.xml:指定具体的清单文件,这里是 manifest.xml,它定义了各个子项目(如 kernel, uboot, tools 等)及其相应的版本和路径。

同步远程仓库

repo sync

该命令会根据 manifest.xml 中的定义,从远程仓库拉取代码。

Repo实际应用

对于Repo的建立应由项目管理员建立,目前本人还没有更多的实际应用经验分享。以下是GPT从实际的工程角度来描述repo仓库建立的一些关键点:

  1. 项目启动阶段:
    项目管理员会在项目开始时规划版本控制结构,如果项目包含多个 Git 仓库,会选择使用 repo 来协调这些仓库的管理。
  2. 创建 manifest 仓库:
    项目管理员创建一个 manifest 仓库,并在其中维护 manifest.xml 文件,记录所有子仓库的地址、分支和提交哈希等信息。
  3. 初始化 repo 配置:
    管理员提供清单仓库的 URL 和分支信息,开发人员通过 repo init 初始化仓库,之后执行 repo sync 同步项目代码。
  4. 后期维护:
    项目管理员负责更新 manifest.xml 文件,开发人员使用 repo sync 拉取最新的代码,确保本地代码与远程仓库同步。

http://www.ppmy.cn/news/1555894.html

相关文章

实战 | 某院校小程序记录

视频教程在我主页简介里 目录&#xff1a; 前言&#xff1a; 渗透思路 1.绕过前端 2.信息泄露 3.爆破用户账号密码 4.信息泄露2 结束 前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#xff0c;奇葩弱口令离…

吉利百度发表联合声明:将积极协助极越处理相关事宜

吉利百度发表联合声明&#xff1a;将积极协助极越处理相关事宜 12月13日&#xff0c;吉利和百度发表关于极越汽车的联合声明&#xff0c;作为股东&#xff0c;将积极协助集度管理层妥善处理相关事宜&#xff1a;第一时间解决员工社保缴纳、离职员工问题&#xff1b;维护用户车…

生信技能65 - SRA数据库公共数据自动化下载及SRA批量自动化拆分

根据NCBI Metadata数据表,实现SRA数据库公共数据自动化下载及SRA批量自动化拆分。 1. 程序逻辑 根据SraRunTable.csv自动从公共数据库下载SRA文件 ;模式0(默认)为下载模式,模式1为拆分模式,拆分支持进度显示;提取Metadata关键信息数据,重新写入新的文本文件。2. 运行示…

k8s的污点与容忍度

污点&#xff08;Taint&#xff09;针对节点来说&#xff0c;和节点亲和性正好相对&#xff0c;节点亲和性使Pod被吸引到一类特定的节点&#xff0c;而污点则使节点能够排斥一类特定的Pod。 容忍度&#xff08;Toleration&#xff09;应用于Pod上&#xff0c;它用来允许调度器…

Stable Diffusion Controlnet常用控制类型解析与实战课程 4

本节内容&#xff0c;是stable diffusion Controlnet常用控制类型解析与实战的第四节课程。上节课程&#xff0c;我们陆续讲解了几个与图像风格约束相关的控制类型&#xff0c;本节课程我们再学习一些实用价值较高的控制类型&#xff0c;看一看他们提供了哪些控制思路。 一&…

数据结构与算法——深度优先搜索算法

系列文章目录 文章目录 系列文章目录前言一、代码模板二、题目案例总结 前言 本文所述的深度优先搜索算法主要针对树状结构&#xff0c;其中的树的每个节点都可以包含0到多个子节点。 深度优先&#xff0c;即为先纵向搜索树的枝干&#xff0c;搜索到该枝干的叶子节点后返回&am…

(笔记)lib:no such lib的另一种错误可能:/etc/ld.so.conf没增加

[TOC]((笔记)lib:no such lib的另一种错误可能&#xff1a;/etc/ld.so.conf没增加) 0.需求说明 通过cmakelist去find一个库时&#xff0c;可能导致报错&#xff0c;例如”libsgm.so cannot open“。但明明已经make install了&#xff0c;所以还有一种可能&#xff1a; 共享库…

JAVA学习日记(二十六)网络编程

一、网络编程的概念 常见的软件架构&#xff1a; 二、网络编程三要素 IP&#xff1a;设备在网络中的地址&#xff0c;是唯一的标识 端口号&#xff1a;应用程序在设备中的唯一标识 协议&#xff1a;数据在网络中传输的规则&#xff0c;常见的协议有UDP、TCP、http、https、f…