源文件: 0c957dd542b1476b34f3ad37736b06df38ea2fa8git
repo清單描述了repo客戶端的結構;這是可見的目錄,而且是git應該可以獲取的目錄。服務器
清單的基本結構是一個裸Git存儲庫,可是在頂級目錄中包含一個'default.xml'XML文件。測試
清單自己就是版本控制的,由於它們保存在Git存儲庫中。客戶在repo sync
期間自動獲取清單更新。fetch
清單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
文件的根元素。命令行
能夠指定一個或多個遠程元素。每一個遠程元素指定由一個或多個項目共享的Git URL,以及(可選)這些項目上載更改的Gerrit審閱服務器。debug
屬性name
:此清單文件惟一的短名稱。這裏指定的名稱在每一個項目的.git / config中用做遠程名稱,所以能夠自動用於git fetch
,git remote
,git pull
和git 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分支的名稱(例如master
或refs / heads / master
)。具備本身revision值的remote將覆蓋default的revision值。
最多能夠指定一個default元素。當項目元素未指定其本身的remote或revision屬性時,將使用他的remote和version屬性。
屬性remote
:預先定義的remote元素的名稱。缺乏本身的遠程屬性的項目元素將使用此remote值。
屬性revision
:Git分支的名稱(例如master
或refs / 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標記。
最多能夠指定一個清單服務器。 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會使用此選項。
能夠指定一個或多個項目元素。每一個元素都描述了一個克隆到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自動下載該項目。若是項目有父元素,那麼name
和path
就是前綴。
屬性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
屬性建立本地鏡像存儲庫。此屬性僅適用於本地鏡像同步,在同步客戶端工做目錄中的項目時將忽略該屬性。
修改指定項目的屬性。
此元素在本地清單文件中很是有用,能夠在不徹底替換現有項目定義的狀況下修改現有項目的屬性。這使得本地清單對原始清單的更改更加健壯。
屬性path
:若是指定,則將更改限制爲在指定路徑檢出的項目,而不是具備給定名稱的全部項目。
屬性groups
:此項目所屬的其餘組的列表。與project
的相應元素語法相同。
屬性revision
:若是指定,則覆蓋原始項目的修訂版。與project
的相應元素語法相同。
能夠將零個或多個註釋元素指定爲項目元素的子元素。每一個元素都描述了一個名稱 - 值對,它將在'forall'命令期間導出到每一個項目的環境中,前綴爲REPO__。此外,還有一個可選屬性「keep」,它接受不區分大小寫的值「true」(默認值)或「false」。此屬性肯定在使用manifest子命令導出時是否保留註釋。
能夠將零個或多個copyfile元素指定爲項目元素的子元素。每一個元素描述一對src-dest文件;在'repo sync'命令期間,「src」文件將被複制到「dest」位置。
「src」是項目相對的,「dest」是相對於樹的頂部。
它就像copyfile同樣,與copyfile同時運行,但不是複製它而是建立一個符號連接。
從內部清單表中刪除命名項目,可能容許同一清單文件中的後續項目元素用不一樣的源替換項目。
此元素在本地清單文件中很是有用,用戶能夠在其中刪除項目,並可能使用本身的定義替換它。
此元素提供將另外一個清單文件包含到原始清單中的功能。正常規則適用於要包含的目標清單 - 它必須是一個可用的清單。
屬性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
中的清單文件以前加載。