Android source是large hierarchy of git repositories。它们由名为repo的自定义脚本管理。 Repo使用manifest.xml确定要管理的git存储库。 manifest.xml of Android与所有其他git存储库一起托管在git存储库中。
如何在Android中管理此存储库?具体来说,每个分支中托管的不同分支和不同文件是如何组织的?
答案 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/projects
和manifest.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)
让我们看到这里: