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

这篇具有很好参考价值的文章主要介绍了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 操作发生时自动执行一些自定义的脚本或命令。文章来源地址https://www.toymoban.com/news/detail-676395.html

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

搭建repo服务

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

到了这里,关于Repo manifests默认default.xml清单文件中的各个标签详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决element ui中的el-tree组件default-checked-keys默认勾选节点问题

    选中子节点的时候,父节点必须被选中,但是仅展示被选中父节点和子节点 方法1 html部分代码: 当需要动态改变树形结构的默认勾选值(例如每条数据都需要调接口查询,根据查询结果渲染树的选中情况)时,只修改defaultChecked的时,值的改变没有渲染相应的树节点,需要通

    2024年04月25日
    浏览(47)
  • iOS 审核 5月1日开始 Privacy manifest files 【隐私清单】

    If you upload an app to App Store Connect that uses required reason API without describing the reason in its privacy manifest file, Apple sends you an email reminding you to add the reason to the app’s privacy manifest. Starting May 1, 2024, apps that don’t describe their use of required reason API in their privacy manifest file aren’t accepted by App

    2024年04月11日
    浏览(39)
  • 在Django项目中的各个应用中分别编写路由配置文件urls.py

    在博文: https://blog.csdn.net/wenhao_ir/article/details/131166889 中,已经讲述了怎么创建项目和应用,这里直接给出命令: 找开文件:learn001urls.py 把原代码: 改为: 在路径: 下新建文件 urls.py 然后写入下面的内容: 在路径: 下新建文件 urls.py 然后写入下面的内容: 三个views.py 文

    2024年02月09日
    浏览(44)
  • k8s的yaml文件中的kind类型都有哪些?(清单版本)

    在操作kubernetes的过程中,我们接触到的yaml文件中的kind类型有很多。他们代表了kubernetes的不同类型的对象,了解了kind的类型,也就相当于了解了k8s都有哪些类型的对象。 序号 类型 简述 1 Pod 一个Kubernetes中最基本的资源类型,它用于定义一个或多个容器的共同运行环境。 2

    2024年01月16日
    浏览(68)
  • Unity中的文件读写TXT 与XML

    在游戏开发中,有的单机游戏会用到保存数据到本地,或者根据本地的数据来进行下次的设置。这里,鄙人介绍TXT与xml 的读写。 首先是txt: 新建一个unity工程,创建一个cube,新建一个脚本:CreatTxt挂载到cube上。然后打开脚本。输入一下的代码: 然后保存运行: 运行后的截

    2024年02月04日
    浏览(44)
  • 路由器常见的默认IP地址清单汇总篇

    在实际生活中,人们难免会遇到需要对路由器进行一番配置,但又不知道设备的默认IP地址的情况。如果是自家的路由器,大不了硬重置(长按reset键);但如果是别人的,恰巧他们又不知道该如何重新设定各种账号密码或参数,问题就比较大条了。 为了化解这种尴尬,感兴

    2024年02月08日
    浏览(46)
  • [postMan_default]关于postman默认安装路径的问题

    Postman安装时,无法修改/自定义安装路径,但安装好后,可手动将其安装文件移–到您想放置的盘中。 方法如下:Postman默认安装路径: C:UserslenovoAppDataLocalPostman 将其文件夹直接剪切到某盘合适的位置既可。 快捷方式 可从其文件夹中找到可执行文件复制一份出来即可

    2024年02月16日
    浏览(36)
  • yml配置文件怎么引用pom.xml中的属性

    配置文件中的一些参数有时要用到pom文件中的属性,做到pom文件变配置文件中也跟着变,那如何才能做到呢,下面咱们来一起探讨学习。 1.首先要在pom.xml中做如下配置,让maven渲染src/main/resources下配置 在yml配置文件中使用@pom中属性名@格式来引用 1、配置pom.xml pom中配置了两个

    2024年01月24日
    浏览(41)
  • Ubuntu 考虑采用新的 “统一默认安装 (unified default install)”

    导读 Ubuntu安装程序中的 “最小化安装” (Minimal installation) 是该发行版多年来最受欢迎的功能之一。 当用户选择 Ubuntu 的 “最小化安装” 选项时,可以在安装更少的预装应用程序情况下,获得完整、功能齐全的 Ubuntu 系统。 但这个功能可能要被砍掉了 —— 将会被新的安装选

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包