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/)