Manifest:
它本身就是一個 git 倉庫,其中存放的都是包含倉庫和子倉庫信息的XML文件。這些文件全部由開發者或者維護者手動配置并自己上傳到 git 倉庫。
另外:Manifest 中的倉庫之間的依賴關系 repo 也并不關心。所以它們可以是同級的也可以是包含關系。
Repo:
repo 本身并不會管理manifest,只是會讀取。比如:初始化的時候 repo init -u <url> 中的url就是 manifest 對應的 git 倉庫。 讀取后,repo會解析XML文件,默認情況下會下載配置文件中的所有倉庫。然后經對應的 menifest 倉庫 clone 到 .repo/manifest 中。
另外: .repo 下的 manifest.git 是manifest 倉庫對應的git配置。? .repo 下的manifest.xml 所鏈接的則是當前repo 正在使用的xml文件。
Repo 在 Manifest 管理中的角色
操作 | 用戶/維護者行為 | Repo 的行為 |
---|---|---|
創建 Manifest | ? 手動編寫 XML 文件 | ? 不參與 |
存儲 Manifest | ? 提交到獨立的 Git 倉庫 | ? 不參與 |
獲取 Manifest | 👤 執行 repo init -u <URL> | ? 克隆倉庫到 .repo/manifests.git |
切換 Manifest | 👤 執行 repo init -b/-m | ? 更新符號鏈接和檢出文件 |
生成臨時副本 | 👤 執行 repo manifest -o output.xml | ? 導出當前配置的 XML 快照 |
工作流:
# 1. 初始使用開發版配置
repo init -u <url> -m dev.xml
repo sync# 2. 切換到客戶定制配置
repo init -m customer-a.xml
repo sync # 自動變化:# - 新增 customer-patches/ 倉庫# - 刪除 experimental-tools/ 倉庫# - 將 kernel 倉庫從 main 切換到 customer-a 分支# 3. 驗證效果
ls
# 輸出: kernel/ app/ customer-patches/ (無 experimental-tools/)