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

源文件: 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://my.oschina.net/lifj/blog/1941064

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值