Android repo清单存储库如何工作?

时间:2011-05-27 08:33:36

标签: android git android-manifest android-source repository

Android sourcelarge hierarchy of git repositories。它们由名为repo的自定义脚本管理。 Repo使用manifest.xml确定要管理的git存储库。 manifest.xml of Android与所有其他git存储库一起托管在git存储库中。

如何在Android中管理此存储库?具体来说,每个分支中托管的不同分支和不同文件是如何组织的?

3 个答案:

答案 0 :(得分:61)

首先,repo init创建.repo目录,将git存储库https://android.googlesource.com/tools/repo克隆到.repo/repo,将使用-u选项指定的git存储库克隆到裸存储库.repo/manifests.git。之后,它会创建.repo/manifests目录,通过创建从.repo/manifests/.git.repo/manifests.git的符号链接将其转换为git存储库。然后它检出-b中指定的分支,并在.repo/manifest.xml中创建指向指定文件(-m选项)的符号链接.repo/manifests,默认为.repo/manifests/default.xml }。

大致如下:

  repo init -u $URL -b $BRANCH -m $MANIFEST
  --------------------
  mkdir .repo; cd .repo
  git clone https://android.googlesource.com/tools/repo
  git clone --bare $URL manifests.git
  mkdir -p manifests/.git; cd manifests/.git
  for i in ../../manifests.git/*; do ln -s $ı .; done
  cd ..
  git checkout $BRANCH -- .
  cd ..
  ln -s manifests/$MANIFEST manifest.xml  

您可以跟踪repo --trace init ...

的实际情况

然后,对.repo/projectsmanifest.xml中的每个项目的repo同步克隆git存储库到local_manifest.xml,创建工作目录,.git具有符号链接到相应的裸存储库,检查清除清单中指定的分支,并更新.repo/project.list。项目已经存在的情况略有不同,基本上执行git pull --rebase

答案 1 :(得分:8)

在repo的根目录是一个名为“.repo”的隐藏目录,在里面你会发现一个名为“manifests”的git项目,它通常包含一个名为“default.xml”的文件。此文件包含有关所有项目及其关联的git存储库所在位置的信息。此文件也是版本化的,因此当您使用“repo init -b XYZ”命令时,它将被还原,您可以返回到可能已添加/删除git项目的较旧分支与头部相比。

这是一个指向清单格式的repo git repo文档的链接:

https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt

答案 2 :(得分:1)

让我们看到这里:

  1. https://groups.google.com/forum/#!topic/repo-discuss/G8_ek7eLvvY
  2. https://code.google.com/p/git-repo/issues/detail?id=46
  3. 我在那个链接中发现了许多有趣的细节