{翻譯} repo Manifest Format 【repo清單格式】

源文件: 0c957dd542b1476b34f3ad37736b06df38ea2fa8git

repo清單格式

repo清單描述了repo客戶端的結構;這是可見的目錄,而且是git應該可以獲取的目錄。服務器

清單的基本結構是一個裸Git存儲庫,可是在頂級目錄中包含一個'default.xml'XML文件。測試

清單自己就是版本控制的,由於它們保存在Git存儲庫中。客戶在repo sync期間自動獲取清單更新。fetch

XML文件格式

清單XML文件(例如'default.xml')大體符合如下DTD:google

<!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>
  ]>

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

元素 manifest

文件的根元素。命令行

元素remote

能夠指定一個或多個遠程元素。每一個遠程元素指定由一個或多個項目共享的Git URL,以及(可選)這些項目上載更改的Gerrit審閱服務器。debug

屬性name:此清單文件惟一的短名稱。這裏指定的名稱在每一個項目的.git / config中用做遠程名稱,所以能夠自動用於git fetchgit remotegit pullgit push等命令。 屬性alias:別名,若是指定,用於覆蓋name,將其設置爲每一個項目中的遠程名稱.git / config. 它的值能夠重複,而屬性name在清單中必須是惟一的文件。這有助於每一個項目可以具備實際指向不一樣遠程URL的相同遠程名稱。版本控制

屬性fetch:使用此遠程的全部項目的Git URL前綴。每一個項目的名稱都附加到此前綴,以造成用於克隆項目的實際URL。code

屬性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中的清單文件以前加載。

相關文章
相關標籤/搜索