1. 程式人生 > >repo的manifest.xml檔案全解

repo的manifest.xml檔案全解

manifest.xml 檔案結構:

<?xml version="1.0" encoding="UTF-8"?>  

<manifest>  
    <remote name="origin" fetch=".." review="review.source.android.com" />  
    <default revision="master" remote="origin" />
    <project name="project/build" path="build" >  
        <copyfile src="makefile" dest="makefile.mk" />
    </project>
    <project name="project/test" path="test" />
    <project name="project/apps/hello" path="apps/hello"/> 
</manifest>
  • manifest
    這個是配置的頂層元素,即根標誌
  • remote
    name:在每一個.git/config檔案的remote項中用到這個name,即表示每個git的遠端伺服器的名字(這個名字很關鍵,如果多個remote屬性的話,default屬性中需要指定default remote)。git pull、get fetch的時候會用到這個remote name。
    alias :可以覆蓋之前定義的remote name,name必須是固定的,但是alias可以不同,可以用來指向不同的remote url
    fetch :所有git url真正路徑的字首,所有git 的project name加上這個字首,就是git url的真正路徑
    review :指定Gerrit的伺服器名,用於repo upload操作。如果沒有指定,則repo upload沒有效果
  • default
    設定所有projects的預設屬性值,如果在project元素裡沒有指定一個屬性,則使用default元素的屬性值。
    remote :遠端伺服器的名字(上面remote屬性中提到過,多個remote的時候需要指定default remote,就是這裡設定了)
    revision :所有git的預設branch,後面project沒有特殊指出revision的話,就用這個branch
    sync_j : 在repo sync中預設並行的數目
    sync_c :如果設定為true,則只同步指定的分支(revision 屬性指定),而不是所有的ref內容
    sync_s : 如果設定為true,則會同步git的子專案
  • manifest-server
    它的url屬性用於指定manifest服務的URL,通常是一個XML RPC 服務
    它要支援一下RPC方法:
    GetApprovedManifest(branch, target) :返回一個manifest用於指示所有projects的分支和編譯目標。
    target引數來自環境變數TARGET_PRODUCT和TARGET_BUILD_VARIANT,組成$TARGET_PRODUCT-$TARGET_BUILD_VARIANT
    GetManifest(tag) :返回指定tag的manifest
  • project
    需要clone的單獨git
    name :git 的名稱,用於生成git url。URL格式是:${remote fetch}/${project name}.git 其中的 fetch就是上面提到的remote 中的fetch元素,name 就是此處的name
    path :clone到本地的git的工作目錄,如果沒有配置的話,跟name一樣
    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時不會下載
    sync_c :如果設定為true,則只同步指定的分支(revision 屬性指定),而不是所有的ref內容。
    sync_s : 如果設定為true,則會同步git的子專案
    upstream :在哪個git分支可以找到一個SHA1。用於同步revision鎖定的manifest(-c 模式)。該模式可以避免同步整個ref空間
    annotation :可以有0個或多個annotation,格式是name-value,repo forall命令是會用來定義環境變數
  • include
    通過name屬性可以引入另外一個manifest檔案(路徑相對與當前的manifest.xml 的路徑)
    name :另一個需要匯入的manifest檔名字
    可以在當前的路徑下新增一個another_manifest.xml,這樣可以在另一個xml中新增或刪除project
  • remove-project
    從內部的manifest表中刪除指定的project。經常用於本地的manifest檔案,使用者可以替換一個project的定義