文档章节

{翻译} repo Manifest Format 【repo清单格式】

拉风的道长
 拉风的道长
发布于 2018/09/02 14:40
字数 2950
阅读 80
收藏 0

源文件: 0c957dd542b1476b34f3ad37736b06df38ea2fa8

repo清单格式

repo清单描述了repo客户端的结构;这是可见的目录,并且是git应该能够获取的目录。

清单的基本结构是一个裸Git存储库,但是在顶级目录中包含一个'default.xml'XML文件。

清单本身就是版本控制的,因为它们保存在Git存储库中。客户在repo sync期间自动获取清单更新。

XML文件格式

清单XML文件(例如'default.xml')大致符合以下DTD:

  <!DOCTYPE manifest [
    <!ELEMENT manifest (notice?,
                        remote*,
                        default?,
                        manifest-server?,
                        remove-project*,
                        project*,
                        extend-project*,
                        repo-hooks?,
                        include*)>
    <!ELEMENT notice (#PCDATA)>
    <!ELEMENT remote EMPTY>
    <!ATTLIST remote name         ID    #REQUIRED>
    <!ATTLIST remote alias        CDATA #IMPLIED>
    <!ATTLIST remote fetch        CDATA #REQUIRED>
    <!ATTLIST remote pushurl      CDATA #IMPLIED>
    <!ATTLIST remote review       CDATA #IMPLIED>
    <!ATTLIST remote revision     CDATA #IMPLIED>
    <!ELEMENT default EMPTY>
    <!ATTLIST default remote      IDREF #IMPLIED>
    <!ATTLIST default revision    CDATA #IMPLIED>
    <!ATTLIST default dest-branch CDATA #IMPLIED>
    <!ATTLIST default upstream    CDATA #IMPLIED>
    <!ATTLIST default sync-j      CDATA #IMPLIED>
    <!ATTLIST default sync-c      CDATA #IMPLIED>
    <!ATTLIST default sync-s      CDATA #IMPLIED>
    <!ATTLIST default sync-tags   CDATA #IMPLIED>
    <!ELEMENT manifest-server EMPTY>
    <!ATTLIST manifest-server url CDATA #REQUIRED>
    <!ELEMENT project (annotation*,
                       project*,
                       copyfile*,
                       linkfile*)>
    <!ATTLIST project name        CDATA #REQUIRED>
    <!ATTLIST project path        CDATA #IMPLIED>
    <!ATTLIST project remote      IDREF #IMPLIED>
    <!ATTLIST project revision    CDATA #IMPLIED>
    <!ATTLIST project dest-branch CDATA #IMPLIED>
    <!ATTLIST project groups      CDATA #IMPLIED>
    <!ATTLIST project sync-c      CDATA #IMPLIED>
    <!ATTLIST project sync-s      CDATA #IMPLIED>
    <!ATTLIST default sync-tags   CDATA #IMPLIED>
    <!ATTLIST project upstream CDATA #IMPLIED>
    <!ATTLIST project clone-depth CDATA #IMPLIED>
    <!ATTLIST project force-path CDATA #IMPLIED>
    <!ELEMENT annotation EMPTY>
    <!ATTLIST annotation name  CDATA #REQUIRED>
    <!ATTLIST annotation value CDATA #REQUIRED>
    <!ATTLIST annotation keep  CDATA "true">
    <!ELEMENT copyfile EMPTY>
    <!ATTLIST copyfile src  CDATA #REQUIRED>
    <!ATTLIST copyfile dest CDATA #REQUIRED>
    <!ELEMENT linkfile EMPTY>
    <!ATTLIST linkfile src CDATA #REQUIRED>
    <!ATTLIST linkfile dest CDATA #REQUIRED>
    <!ELEMENT extend-project EMPTY>
    <!ATTLIST extend-project name CDATA #REQUIRED>
    <!ATTLIST extend-project path CDATA #IMPLIED>
    <!ATTLIST extend-project groups CDATA #IMPLIED>
    <!ATTLIST extend-project revision CDATA #IMPLIED>
    <!ELEMENT remove-project EMPTY>
    <!ATTLIST remove-project name  CDATA #REQUIRED>
    <!ELEMENT repo-hooks EMPTY>
    <!ATTLIST repo-hooks in-project CDATA #REQUIRED>
    <!ATTLIST repo-hooks enabled-list CDATA #REQUIRED>
    <!ELEMENT include EMPTY>
    <!ATTLIST include name CDATA #REQUIRED>
  ]>
  

下面是元素及其属性的描述。

元素 manifest

文件的根元素。

元素remote

可以指定一个或多个远程元素。每个远程元素指定由一个或多个项目共享的Git URL,以及(可选)这些项目上载更改的Gerrit审阅服务器。

属性name:此清单文件唯一的短名称。这里指定的名称在每个项目的.git / config中用作远程名称,因此可以自动用于git fetchgit remotegit pullgit push等命令。 属性alias:别名,如果指定,用于覆盖name,将其设置为每个项目中的远程名称.git / config. 它的值可以重复,而属性name在清单中必须是唯一的文件。这有助于每个项目能够具有实际指向不同远程URL的相同远程名称。

属性fetch:使用此远程的所有项目的Git URL前缀。每个项目的名称都附加到此前缀,以形成用于克隆项目的实际URL。

属性pushurl:使用此远程的所有项目的Git“推送”URL前缀。每个项目的名称都附加到此前缀,以形成用于“git push”项目的实际URL。该属性是可选的;如果没有指定,那么“git push”将使用与fetch属性相同的URL。

属性review:Gerrit服务器的主机名,其中评论由repo upload上传到。该属性是可选的;如果没有指定,那么repo upload将不起作用。

属性revision:Git分支的名称(例如masterrefs / heads / master)。具有自己revision值的remote将覆盖default的revision值。

元素default

最多可以指定一个default元素。当项目元素未指定其自己的remote或revision属性时,将使用他的remote和version属性。

属性remote:预先定义的remote元素的名称。缺少自己的远程属性的项目元素将使用此remote值。

属性revision:Git分支的名称(例如masterrefs / heads / master)。缺少自己的revision属性的项目元素将使用此值。

属性'dest-branch:Git分支的名称(例如master)。不设置自己的dest-branch的项目元素将继承此值。如果未设置此值,项目将默认使用revision`。

属性upstream:可以找到sha1的Git ref的名称。在-c模式下同步修订锁定清单时使用,以避免必须同步整个ref空间。不设置自己的upstream的项目元素将继承此值。

属性sync-j:同步时要使用的并行作业数。

属性sync-c:设置为true以仅同步给定的Git分支(在revision属性中指定)而不是整个ref空间。缺少自己的sync-c元素的项目元素将使用此值。

属性sync-s:设置为true以同步子项目。

属性sync-tags:设置为false以仅同步给定的Git分支(在revision属性中指定)而不是其他ref标记。

元素 manifest-server

最多可以指定一个清单服务器。 url属性用于指定清单服务器的URL,该服务器是XML RPC服务。

清单服务器应该实现以下RPC方法:

   GetApprovedManifest(branch,target)

返回一个清单,其中每个项目都与当前分支和目标的已知良好修订挂钩。当给出--smart-sync选项时,repo sync会使用此选项。

要使用的目标由环境变量TARGET_PRODUCT和TARGET_BUILD_VARIANT定义。这些变量用于创建$ TARGET_PRODUCT- $ TARGET_BUILD_VARIANT形式的字符串,例如,passion-userdebug。如果其中一个变量或两者都不存在,程序将调用不带目标参数的GetApprovedManifest,清单服务器应选择合理的默认目标。

GetManifest(tag)

返回一个清单,其中每个项目都与指定标记处的修订版挂钩。当给出--smart-tag选项时,repo sync会使用此选项。

元素 project

可以指定一个或多个项目元素。每个元素都描述了一个克隆到repo客户端工作区的Git存储库。您可以通过创建嵌套项目来指定Git子模块。 Git子模块将被自动识别并继承其父级属性,但这些属性可能会被显式指定的项目元素覆盖。

属性name:此项目的唯一名称。项目的名称将附加到其远程的提取URL上,以生成用于配置Git远程的实际URL。 URL形成为:

${remote_fetch}/${PROJECT_NAME}.git

其中$ {remote_fetch}是远程的fetch属性,$ {project_name}是项目的name属性。始终附加后缀“.git”,因为repo假设上游是一个裸Git存储库。如果项目具有父元素,则其名称将以父元素为前缀。如果Gerrit用于代码审查,项目名称必须与Gerrit知道的名称相匹配。

属性path:相对于repo客户端的顶级目录的可选路径,其中应放置此项目的Git工作目录。如果未提供,则使用项目名称。如果项目具有父元素,则其路径将以父元素为前缀。

属性remote:先前定义的远程元素的名称。如果未提供,则使用默认元素给定的remote值。

属性revision:清单要为此项目跟踪的Git分支的名称。名称可以是refs / heads(例如只是“master”)或绝对名称(例如“refs / heads / master”)。标签和/或显式SHA-1应该在理论上有效,但尚未经过广泛测试。如果未提供,则使用远程元素给出的version(如果适用),否则使用default中的值。

属性dest-branch:Git分支的名称(例如master)。使用repo upload时,将提交更改以在此分支上进行代码审查。如果未在此处和default中指定,则使用revision

属性groups:此项目所属的组列表,空格或逗号分隔。所有项目都属于“all”组,每个项目自动属于一个名称组:name和path:path。例如。对于<project name =“monkeys”path =“barrel-of”/>,该项目定义隐含在以下清单组中:default,name:monkeys和path:barrel-of。如果您将项目放入“notdefault”组中,则不会通过repo自动下载该项目。如果项目有父元素,那么namepath就是前缀。

属性sync-c:设置为true以仅同步给定的Git分支(在revision属性中指定)而不是整个ref空间。

属性sync-s:设置为true以同步子项目。

属性upstream:可以找到sha1的Git ref的名称。在-c模式下同步修订锁定清单时使用,以避免必须同步整个ref空间。

属性clone-depth:设置获取此项目时使用的深度。如果指定,则此值将覆盖使用命令行上的--depth选项为repo init指定的任何值。

属性force-path:设置为true以强制此项目根据其path属性(如果提供)而不是name属性创建本地镜像存储库。此属性仅适用于本地镜像同步,在同步客户端工作目录中的项目时将忽略该属性。

元素 extend-project

修改指定项目的属性。

此元素在本地清单文件中非常有用,可以在不完全替换现有项目定义的情况下修改现有项目的属性。这使得本地清单对原始清单的更改更加健壮。

属性path:如果指定,则将更改限制为在指定路径检出的项目,而不是具有给定名称的所有项目。

属性groups:此项目所属的其他组的列表。与project的相应元素语法相同。

属性revision:如果指定,则覆盖原始项目的修订版。与project的相应元素语法相同。

元素 annotation

可以将零个或多个注释元素指定为项目元素的子元素。每个元素都描述了一个名称 - 值对,它将在'forall'命令期间导出到每个项目的环境中,前缀为REPO__。此外,还有一个可选属性“keep”,它接受不区分大小写的值“true”(默认值)或“false”。此属性确定在使用manifest子命令导出时是否保留注释。

元素copyfile

可以将零个或多个copyfile元素指定为项目元素的子元素。每个元素描述一对src-dest文件;在'repo sync'命令期间,“src”文件将被复制到“dest”位置。

“src”是项目相对的,“dest”是相对于树的顶部。

元素 linkfile

它就像copyfile一样,与copyfile同时运行,但不是复制它而是创建一个符号链接。

元素 remove-project

从内部清单表中删除命名项目,可能允许同一清单文件中的后续项目元素用不同的源替换项目。

此元素在本地清单文件中非常有用,用户可以在其中删除项目,并可能使用自己的定义替换它。

元素include

此元素提供将另一个清单文件包含到原始清单中的功能。正常规则适用于要包含的目标清单 - 它必须是一个可用的清单。

属性name:要包含的清单,相对于清单存储库的根目录指定。

本地清单

可以通过存储在$ TOP_DIR/.repo/local_manifests/*.xml中的本地清单文件添加其他远程和项目。 例如:

  $ ls .repo/local_manifests
  local_manifest.xml
  another_local_manifest.xml
  $ cat .repo/local_manifests/local_manifest.xml
  <?xml version="1.0" encoding="UTF-8"?>
  <manifest>
    <project path="manifest"
             name="tools/manifest" />
    <project path="platform-manifest"
             name="platform/manifest" />
  </manifest>

用户可以在“repo sync”调用之前将项目添加到本地清单,指示repo自动下载和管理这些额外项目。

存储在$ TOP_DIR/.repo/local_manifests/*.xml中的清单文件将按字母顺序加载。

其他remote和project也可以通过本地清单添加,存储在$TOP_DIR/.repo/local_manifest.xml中。不推荐使用此方法,而是使用上面提到的多个清单文件。

如果存在$TOP_DIR/.repo/local_manifest.xml,它将在任何存储在$TOP_DIR/.repo/local_manifests /*.xml中的清单文件之前加载。

本文转载自:https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt

共有 人打赏支持
拉风的道长
粉丝 54
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
Android内核开发:理解和掌握repo工具

repo是什么? repo是一种代码版本管理工具,它是由一系列的Python脚本组成,封装了一系列的Git命令,用来统一管理多个Git仓库。 2. 为什么要用repo? 因为Android源码引用了很多开源项目,每...

乐搏学院
2016/11/18
7
0
Android中Repo 常用命令参考

原文地址 译者:远方的自由 转载请注明出处: http://blog.csdn.net/z2066411585 Repo使用形式如下: repo 可选元素显示在[]中,例如,许多命令将项目列表作为参数,你可以指定项目列表作为项目的...

程序手艺人
2018/01/24
0
0
repo详解与如何更改manifest快速获取和复用AOSP代码

源起 现在很多企业的网络一般都比较快, 但是有的企业却会限速, 如果需要从github和google code上面git clone大的仓库的话, 那么需要耗费的时间是很客观的, 例如从github或者google code, 或者...

sy373466062
2017/02/15
0
0
android 4.1源码下载方法最新实例教程

1、安装repo ,执行命令如下: $ curl https: // dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod +x ~/bin/ repo 2、初始化 repo ,执行命令如下: $ repo init -u......

长平狐
2012/08/14
1K
0
Android 系统核心或驱动的开发之Android repo 魔法

Android 系统核心或驱动的开发之Android repo 魔法 Android 为企业提供一个新的市场,无论大企业,小企业都是处于同一个起跑线上。研究 Android 尤其是 Android 系统核心或者是驱动的开发,首...

eric72
2010/10/26
7.7K
2

没有更多内容

加载失败,请刷新页面

加载更多

四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0
浅谈mybatis的日志适配模式

Java开发中经常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。有关适配器模式例子可以参考 设计...

算法之名
昨天
13
0
大数据教程(13.6)sqoop使用教程

上一章节,介绍了sqoop数据迁移工具安装以及简单导入实例的相关知识;本篇博客,博主将继续为小伙伴们分享sqoop的使用。 一、sqoop数据导入 (1)、导入关系表到HIVE ./sqoop import --connect...

em_aaron
昨天
3
0
Git cherry-pick 使用总结

应用背景:假设现在有两个分支:dev_01, dev_02. 如果我想把dev_01分支上的某几个commit合并到dev_02分支, 那么怎么办呢? 这就是cherry-pick的工作了。cherry-pick会捡选某些commit, 即把某...

天王盖地虎626
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部