Repo manifests默认default.xml清单文件中的各个标签详解

Repo简介

“Repo” 是一个用于管理多个Git存储库的工具,通常与Google的Android开发项目一起使用。它允许您在一个命令下轻松地进行多个Git存储库的同步、下载和管理。

repo下载安装

从清华镜像源下载

mkdir ~/bin  
PATH=~/bin:$PATH  
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo #~/bin/repo为repo下载本地的存放路径
chmod a+x ~/bin/repo  

其实下载下来的repo文件只是一个使用Python编写的引导脚本(Google 称之为 Repo launcher,本质上是一个python脚本,可以使用vim打开的),完整的repo(即,repo的主体部分)还没有下载。

repo help

查看repo帮助说明,该帮助列举了repo所支持的子命令,及各个子命令的简要介绍。
如果需要查看某个具体子命令的详细介绍,执行命令repo help 即可。例如查看repo init的帮助,可以输入repo help init。

上一小节已经提及到了,下载下来的repo只是一个引导脚本,完整的repo工具还没有下载,此时执行repo help命令只能看到init和help两个子命令,而且帮助信息中还会提示repo还未安装,需要执行repo init安装。(需要注意repo init需要跟参数的,后面会单独介绍repo init的使用)
当执行完repo init下载了完整的repo工具之后,再执行repo help就会看到repo更多的子命令。
注意:repo init -u 后跟url地址,如果是自己项目,则是Android源码项目源码编辑的Repo的地址;如果是官方AOSP repo是官方配置好的,可以对比如下两个安装repo工具的方式:

repo init -u https://github.com/remote-android/platform_manifests.git -b redroid-11.0.0 --depth=1 --git-lfs # 自定义repo工具中描述源码仓库地址组织形式
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r1 # 官方AOSP repo中源码仓库组织形式
或者
repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r12
如果需要某个特定的 Android 版本,特定版本标记查看
<https://source.android.google.cn/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds>

repo init -u 命令效果
首先当前目录产生一个.repo目录
然后克隆一份repo的源代码到.repo/repo下,里面存放了其他repo子命令,即repo的主体部分。
接着从manifest_git_path仓库地址clone清单库到.repo/manifests和.repo/manifests.git目录。
同时.repo目录下还包括manifest仓库(清单库)内容

.repo文件夹简介
执行repo init命令之后,会在当前目录创建一个.repo文件夹。

文件夹            描述
manifests          manifest仓库(清单库)内容,即repo init的-u选项对应的仓库
manifests.git      manifest仓库(清单库)的.git目录
manifest.xml      指明当前生效的Manifest文件,即repo init的-m选项对应的参数(没有该选项时默认为default.xml)
repo                 repo命令的主体,包含了最新的 repo 命令

manifest文件分析

所谓manifest仓库(清单库)其实就是存放manifest(清单)文件的仓库,实际上可以是任意仓库,只要该仓库中存在repo init命令-m选项指定的manifest文件即可,清单库命名为manifest只不过是一种约定俗成的写法罢了。
manifest仓库一般都会有一个manifests\default.xml文件,该文件为默认的manifest文件。

<?xml version="1.0" encoding="UTF-8"?>
<manifest><remote  name="aosp"fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/"review="https://android-review.googlesource.com/" /><default revision="refs/tags/android-12.0.0_r32"remote="aosp"sync-j="4" /><superproject name="platform/superproject" remote="aosp" revision="android-12.0.0_r32" /><contactinfo bugurl="go/repo-bug" /><project path="build/make" name="platform/build" groups="pdk" ><copyfile src="core/root.mk" dest="Makefile" /><linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" /><linkfile src="buildspec.mk.default" dest="build/buildspec.mk.default" /><linkfile src="core" dest="build/core" /><linkfile src="envsetup.sh" dest="build/envsetup.sh" /><linkfile src="target" dest="build/target" /><linkfile src="tools" dest="build/tools" /></project><project path="build/bazel" name="platform/build/bazel" groups="pdk" ><linkfile src="bazel.WORKSPACE" dest="WORKSPACE" /><linkfile src="bazel.sh" dest="tools/bazel" /><linkfile src="bazel.BUILD" dest="BUILD" /></project><project path="build/blueprint" name="platform/build/blueprint" groups="pdk,tradefed" /><project path="build/pesto" name="platform/build/pesto" groups="pdk" /><project path="build/soong" name="platform/build/soong" groups="pdk,tradefed" ><linkfile src="root.bp" dest="Android.bp" /><linkfile src="bootstrap.bash" dest="bootstrap.bash" /></project><project path="art" name="platform/art" groups="pdk" /><project path="bionic" name="platform/bionic" groups="pdk" /><project path="bootable/recovery" name="platform/bootable/recovery" groups="pdk" /><project path="bootable/libbootloader" name="platform/bootable/libbootloader" groups="vts,pdk" /><project path="compatibility/cdd" name="platform/compatibility/cdd" groups="pdk" /><project path="cts" name="platform/cts" groups="cts,pdk-cw-fs,pdk-fs" /><project path="dalvik" name="platform/dalvik" groups="pdk-cw-fs,pdk-fs" /><project path="developers/build" name="platform/developers/build" groups="developers,pdk" />省略一部分....<repo-hooks in-project="platform/tools/repohooks" enabled-list="pre-upload" />
</manifest>

清单文件各元素解释

  1. <manifest> 根标签
    这个是配置的顶层元素,即根标志

  2. <remote> 标签
    remote元素可以有多个,用于存在多个git远程服务器的情况。

    • name 即表示每个git的远程服务器的名字(这个名字很关键,如果多个remote属性的话,default属性中需要指定default remote)。git pull、get fetch的时候会用到这个remote name。

    • fetch :所有git url真正路径的前缀,所有git 的project name(就是后面的project标签的name元素)加上这个前缀,就是git url的真正路径;如果使用此remote的所有项目的前缀和manifest仓库前置一致的话,可以使用…代替。

      repo init -u https://github.com/remote-android/platform_manifests.git -b redroid-11.0.0 的manifest仓库前置https://github.com/remote-android/

    • review:通过repo upload将评论上传到的 Gerrit 服务器的主机名。 该属性是可选的; 如果未指定,则repo upload将不起作用。

    • alias:该属性可以省略,当指定了该属性时,可以覆盖name属性设置每个项目的.git/config中的远程名称。不同remote元素的alias属性可以相同,比如不同remote元素的alias属性可以都是origin。

  3. <default>标签元素
    default元素只能有一个。设定所有project标签的默认属性值,如果在project元素里没有指定一个属性,则使用default元素的属性值。

    • remote :远程服务器的名字(上面remote属性中提到过,多个remote的时候需要指定default remote,就是这里设置了)
    • revision :所有git的默认branch,后面project没有特殊指出revision的话,就用这个branch
    • sync_j : 在repo sync中默认并行的数目
  4. <superproject> 标签是该清单文件中的一个元素,用于定义一个超级项目(也称为"manifest项目")。
    超级项目是一个特殊的项目,它通常用于组织多个子项目。在Android源代码管理中,这些子项目可以是不同的软件组件、库、应用程序等。超级项目本身通常不包含实际的源代码,它主要用于管理和同步这些子项目的代码。
    default.xml 文件中的 superproject 标签主要包含以下信息:

    • name 属性:指定超级项目的名称。这个名称通常是一个唯一标识符,用于区分不同的超级项目。
    • path 属性:指定超级项目的路径。这是超级项目在本地文件系统中的相对路径,Repo将会在该路径下创建一个文件夹来管理超级项目。
    • remote 属性:指定与超级项目相关联的Git远程存储库的名称。这个远程存储库通常包含了清单文件的信息以及管理所有子项目的信息。
    • revision 属性:指定要使用的Git分支、标签或提交ID。这决定了超级项目所管理的子项目的版本。
  5. <project> 标签
    需要clone的单独git,每一个代表了一个可以被clone到工作区的仓库,定义了一个 Git 仓库项目的配置信息。

    • name :git 的名称,用于生成git url。URL格式是: r e m o t e f e t c h / {remote fetch}/ remotefetch/{project name}.git 其中的 fetch就是上面提到的remote中标签的fetch属性,name 就是此处的name;如果这个project有一个parent属性,则该project最终的url会被这样拼凑
      r e m o t e f e t c h / {remote_fetch}/ remotefetch/{project_parent}/${project_name}.git
    • path :指定仓库在本地文件系统中的路径。clone到本地的git的工作目录,如果没有配置的话,使用name属性值;相对于repo的根目录而言的相对路径;
    • remote :指定该仓库使用的远程仓库的名称。定义remote name,如果没有定义的话就用default中定义的remote name
    • revision :指定该仓库使用的分支、标签或提交。指定需要获取的git提交点,可以定义成固定的branch,或者是明确的commit 哈希值
    • groups :指定该仓库所属的分组,用于组织仓库。列出project所属的组,以空格或者逗号分隔多个组名。所有的project都自动属于"all"组。每一个project自动属于name:‘name’ 和path:'path’组。例如,它自动属于default, name:monkeys, and path:barrel-of组。如果一个project属于notdefault组,则,repo sync时不会下载
  6. copyfile 标签
    project元素的子元素,每个元素描述了一对 src-dest 文件对。同步时(即执行repo sync命令时)src文件会被拷贝到dest。通常会被用于 README 或 Makefile 或其他构建脚本。

    • dest:是相对于当前目录(执行repo init和repo sync命令的目录)的路径
    • src:是相对于project标签的path属性值的相对路径
  7. linkfile标签
    与copyfile类似,只不过不是拷贝,而是进行一个符号链接。

  8. include 标签
    通过name属性可以引入另外一个manifest文件(路径相对与当前的manifest.xml 的路径),name:另一个需要导入的manifest文件名字
    可以在当前的路径下添加一个another_manifest.xml,这样可以在另一个xml中添加或删除project

  9. remove-project 标签
    从内部的manifest表中删除指定的project。用于从清单文件中移除一个项目。这可以用于停止同步某个项目的代码。

  10. annotation标签
    提供对 元素的注释,用于描述仓库的用途或其他信息。

  11. repo-hooks 标签
    用于定义 Repo 在执行特定操作时应该触发的钩子(hooks)脚本。Repo 钩子是一种机制,允许你在特定的 Git 操作发生时自动执行一些自定义的脚本或命令。

    • in-project:指定钩子脚本的相对路径,这是相对于当前 Repo 的路径。这个属性通常用于为特定 Repo 设置钩子脚本,而不是全局设置。
    • enabled-list:一个用逗号分隔的钩子名称列表,指定哪些钩子应该在当前 Repo 上启用。这允许你选择性地启用或禁用 Repo 钩子。

搭建repo服务

  • 简而言之:
    部署通用的工具仓库git-repo.git。
    部署自己的清单仓库manifests.git。
    编写清单文件manifests.xml
    批量创建工程子仓库和上传源代码。

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

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

相关文章

C++ 新特性 | C++ 11 | decltype 关键字

一、decltype 关键字 1、介绍 decltype 是 C11 新增的一个用来推导表达式类型的关键字。和 auto 的功能一样&#xff0c;用来在编译时期进行自动类型推导。引入 decltype 是因为 auto 并不适用于所有的自动类型推导场景&#xff0c;在某些特殊情况下 auto 用起来很不方便&…

2023.8各大浏览器11家对比:Edge/Chrome/Opera/Firefox/Tor/Vivaldi/Brave,安全性,速度,体积,内存占用

测试环境&#xff1a;全默认设置的情况下&#xff0c;均在全新的系统上进行测试&#xff0c;系统并未进行任何改动&#xff0c;没有杀毒软件&#xff0c;浏览器进程全部在后台&#xff0c;且为小窗模式&#xff0c;小窗分辨率均为浏览器厂商默认缩放大小(变量不唯一)&#xff0…

ARM linux ALSA 音频驱动开发方法

+他V hezkz17进数字音频系统研究开发交流答疑群(课题组) 一 linux ALSA介绍 ALSA (Advanced Linux Sound Architecture) 是一个用于提供音频功能的开源软件框架。它是Linux操作系统中音频驱动程序和用户空间应用程序之间的接口。ALSA 提供了访问声卡硬件的低级别API,并支持…

DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(二)

DevExpress WinForms超过80个高影响力的WinForms编辑器和多用途控件&#xff0c;从屏蔽数据输入和内置数据验证到HTML格式化&#xff0c;DevExpress数据编辑库提供了无与伦比的数据编辑选项&#xff0c;包括用于独立数据编辑或用于容器控件(如Grid, TreeList和Ribbon)的单元格。…

nginx会话保持

ip_hash:通过IP保持会话 作用&#xff1a; nginx通过后端服务器地址将请求定向的转发到服务器上。 将客户端的IP地址通过哈希算法加密成一个数值 如果后端有多个服务器&#xff0c;第一次请求到服务器A&#xff0c; 并在务器登录成功&#xff0c;那么再登录B服务器就要重新…

AIGC ChatGPT 制作地图可视化分析

地图可视化分析是一种将数据通过地图的形式进行展示的方法&#xff0c;可以让人们更加直观、快速、准确的理解和分析数据。以下是地图可视化分析的一些主要好处&#xff1a; 加强数据理解&#xff1a;地图可视化可以将抽象的数字转化为直观的图形&#xff0c;帮助我们更好地理解…

黑马头条-kafka配置

生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表&#xff0c;用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…&#xff0c;无需添加所有的集群地址&#xff0c;kafka会根据提供的地址发现其他的地址&…

科技赋能,教育革新——大步迈向体育强国梦

在 "全民健身"、"体育强国建设"战略的推进下&#xff0c;体育考试成绩被纳入重要升学考试且分值不断提高&#xff0c;体育科目的地位逐步上升到前所未有的高度&#xff0c;在此趋势下&#xff0c;体育教学正演变出更多元化、个性化的需求。然而现实中却面临…

『C语言入门』探索C语言函数

文章目录 导言一、函数概述定义与作用重要性 二、函数分类库函数自定义函数定义使用好处 三、函数参数实际参数&#xff08;实参&#xff09;形式参数&#xff08;形参&#xff09;内存分配 四、函数调用传值调用传址调用 五、函数嵌套调用与链式访问嵌套调用链式访问 六、函数…

8.8 【C语言】动态内存分配与指向它的指针变量

8.8.1 什么是内存的动态分配 栈&#xff1a;全局变量和局部变量&#xff0c;全局变量是分配在内存中的静态存储区的&#xff0c;非静态的局部变量是分配在内存中的动态存储区的。 堆&#xff1a;数据临时存放在一个特别的自由存储区。 8.8.2 怎样建立内存的动态分配 对内存…

Python标准库概览

Python标准库概览 知识点 标准库: turtle库(必选)标准库: random库(必选)、time库(可选&#xff09; 知识导图 1、turtle库概述 turtle&#xff08;海龟&#xff09;是Python重要的标准库之一&#xff0c;它能够进行基本的图形绘制。turtle库绘制图形有一个基本框架&#x…

RabbitMQ特性介绍和使用案例

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 RabbitMQ特性…

Web 开发 Django 管理工具

上次为大家介绍了 Django 的模型&#xff0c;通过模型就可以操作数据库&#xff0c;从而就可以改变页面的展示内容&#xff0c;那问题来了&#xff0c;我们只能通过手动编辑模型文件来配置模型吗&#xff1f;当然不是&#xff0c;Django 为我们提供了强大的工具&#xff0c;可以…

【架构】探索计算机处理器的世界:ARM和x86架构解析及指令集

目录 导语ARM架构x86架构AMD公司对比与应用不同架构处理器的指令集结语 导语 计算机处理器是数字化时代的核心引擎&#xff0c;而在众多处理器架构中&#xff0c;ARM和x86是备受关注的三个。本文将带您深入探索这三个架构&#xff0c;介绍它们的特点、公司背景以及应用领域。让…

ARM Linux 系统稳定性分析入门及渐进 13 -- gdb 反汇编 disassemble 命令详细介绍及举例】

文章目录 1.1 gdb 调试回顾1.1.1 gdb list 命令介绍 1.2 反汇编命令 dis 介绍1.2.1 如何设置 gdb 汇编代码的格式 1.1 gdb 调试回顾 在GNU调试器&#xff08;GDB&#xff09;中&#xff0c;有许多命令可以帮助我们调试应用程序。 gdb: 这是一个强大的Unix下的程序调试工具。以…

融资融券利率是多少?最低是哪一家?

按目前市场上统计的数据看&#xff0c;融资融券的默认利率是8.35%&#xff0c;普遍利率在6左右&#xff0c;融资融券简单的来说就是信用账户&#xff0c;包括融资和融券两部分。 融资就是向券商借钱炒股交易&#xff0c;现金融资比例是1&#xff1a;1。股票有折算率&#xff0c…

Java中常见的异常类

在Java中&#xff0c;异常&#xff08;Exception&#xff09;是指在程序执行过程中可能出现的错误或异常情况。Java通过异常类来表示这些异常情况&#xff0c;异常类是从java.lang.Exception类继承的。异常类可以分为两大类&#xff1a;Checked异常和Unchecked异常。 Checked异…

【JavaEE】Spring全家桶实现AOP-统一处理

【JavaEE】AOP&#xff08;2&#xff09; 文章目录 【JavaEE】AOP&#xff08;2&#xff09;1. 统一登录校验处理1.1 自定义拦截器1.2 将自定义拦截器加入到系统配置1.3 测试1.4 对于静态资源的处理1.5 小练习&#xff1a;统一登录拦截处理1.6 拦截器原理1.6.1 执行流程1.6.2 源…

matlab 最小二乘拟合二维直线(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 平面直线的表达式为: y = k x + b

C++学习第十八天----switch语句

1. &#xff1f;:运算符 条件运算符&#xff0c;又叫三元运算符&#xff1b; 该运算符的通用格式为&#xff1a; expression1&#xff1f;expression2 &#xff1a;expression3&#xff1b; 意义是假如1为true&#xff0c;则整个条件表达式的值为2的值&#xff0c;否则为3的值&…