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/projects
到manifest.xml
和local_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