Android回购清单存储库如何工作?

Android源代码是一个很大的git仓库层次结构 。 它们由称为回购的自定义脚本pipe理。 Repo使用manifest.xml来确定要pipe理的git存储库。 Android的manifest.xml与其他所有git仓库一起被托pipe在一个git仓库中。

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

首先,repo init创build.repo目录,将git存储库https://android.googlesource.com/tools/repo .repo/repo.repo/repo ,并将-u选项指定的git存储库.repo/manifests.git.repo/manifests.git的裸存储库.repo/manifests.git 。 之后,它会创build.repo/manifests目录,通过创build从.repo/manifests/.git.repo/manifests.git符号链接,将其转换为git存储库。 然后检出-b指定的分支,并创build一个符号链接.repo/manifest.xml指向.repo/manifest.xml中的指定文件( -m选项),缺省情况下为.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 manifest / .git;  CD清单/ .git
  因为我在../../manifests.git/*; 做ln -s $ı。  DONE
   cd ..
   git checkout $ BRANCH  - 。
   cd ..
   ls -s manifest / $ MANIFEST manifest.xml  

你可以跟踪真正发生的事情与repo --trace init ...跟踪repo --trace init ...

然后,repo sync将git存储.repo/projectsmanifest.xmllocal_manifest.xml每个项目的.repo/projects ,创build具有.git工作目录,其中具有到相应裸仓库的符号链接,检出清单中指定的分支并进行更新.repo/project.list 。 项目已经存在的情况稍有不同,本质上是执行git pull --rebase

在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

让我们看看这里:

  1. https://groups.google.com/forum/#!topic/repo-discuss/G8_ek7eLvvY
  2. https://code.google.com/p/git-repo/issues/detail?id=46

我发现,在这个环节,许多有趣的细节