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

Bja*_*sen 45 git android repository android-manifest android-source

Android的源是一个Git仓库的大型层次结构.它们由名为repo的自定义脚本管理.Repo使用manifest.xml确定要管理的git存储库.Androidmanifest.xml与所有其他git存储库一起托管在git存储库中.

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

Pek*_*der 63

首先,repo init创建.repo目录,克隆git存储库https://android.googlesource.com/tools/repo.repo/repo,以及使用-u选项指定的git存储库到一个裸存储库.repo/manifests.git.在此之后,它创建的.repo/manifests目录,将其转换成一个Git仓库,通过从创建符号链接.repo/manifests/.git.repo/manifests.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同步克隆git存储库以.repo/projects用于每个项目,manifest.xmllocal_manifest.xml创建.git具有符号链接到相应裸存储库的工作目录,检出清单中指定的分支,并更新.repo/project.list.项目已经存在的情况略有不同,基本上执行了git pull --rebase.

  • @Hamy - 它允许一个rm -fr一个可见的项目构建目录而不会丢失git对象,因此后续的repo sync会很快. (2认同)

sat*_*ine 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