Android source由 repo 管理.使用 repo 同步时,会创建一个名为 .repo/projects/
的目录,其中包含所有直接在当前工作目录中 check out 的 git 存储库,只是以裸 git 格式。
repo 维护裸 git 存储库的目的是什么? repo 如何使用这些裸存储库?
(注意:澄清:当我写“repo”时,我不是在谈论 git 存储库,我是在专门讨论由 Android 创建/为 Android 创建的名为 repo
的脚本,用于维护包含安卓源。)
最佳答案
在使用 Android 存储库 list 系统一段时间后,我想我现在明白了 .repo/projects/
目录中的裸存储库的用途。
正如@Fredrik 已经回答的那样,这些项目没有直接在 repo
创建的“克隆”中表示的存储库的另一个副本。事实上,克隆中所有 .git
目录的内容只是符号链接(symbolic link),如下所示:
$ ll development/.git/
total 452
drwxr-xr-x 2 bfh bfh 4096 2011-08-15 13:55 ./
drwxr-xr-x 20 bfh bfh 4096 2011-08-15 13:55 ../
lrwxrwxrwx 1 bfh bfh 43 2011-08-15 13:55 config -> ../../.repo/projects/development.git/config
lrwxrwxrwx 1 bfh bfh 48 2011-08-15 13:55 description -> ../../.repo/projects/development.git/description
-rw-r--r-- 1 bfh bfh 41 2011-08-15 13:55 HEAD
lrwxrwxrwx 1 bfh bfh 42 2011-08-15 13:55 hooks -> ../../.repo/projects/development.git/hooks/
-rw-r--r-- 1 bfh bfh 449008 2011-08-15 13:55 index
lrwxrwxrwx 1 bfh bfh 41 2011-08-15 13:55 info -> ../../.repo/projects/development.git/info/
lrwxrwxrwx 1 bfh bfh 41 2011-08-15 13:55 logs -> ../../.repo/projects/development.git/logs/
lrwxrwxrwx 1 bfh bfh 44 2011-08-15 13:55 objects -> ../../.repo/projects/development.git/objects/
lrwxrwxrwx 1 bfh bfh 48 2011-08-15 13:55 packed-refs -> ../../.repo/projects/development.git/packed-refs
lrwxrwxrwx 1 bfh bfh 41 2011-08-15 13:55 refs -> ../../.repo/projects/development.git/refs/
lrwxrwxrwx 1 bfh bfh 45 2011-08-15 13:55 rr-cache -> ../../.repo/projects/development.git/rr-cache/
lrwxrwxrwx 1 bfh bfh 40 2011-08-15 13:55 svn -> ../../.repo/projects/development.git/svn
因此,实际的 git 存储库仅在克隆中表示一次。
保持裸机和普通 git 的原因是 list 系统的工作方式。 list 系统是一种指定将被 checkout 的 git 集合以及它们将被 checkout 的版本的方法。 list 文件本身在 git 中维护,repo 命令允许根据需要更改该 list git 的分支。
因此,根据 list 文件中当前选择的内容,允许(快速)删除和添加 gits 的方法,repo 可以只保留你在 .repo/projects
中克隆的所有 gits > 文件夹,然后只有在 list 文件的当前分支中选择它们时,才将它们复制到“正常”克隆区域。
关于android - .repo/projects/由 Android repo 脚本创建的裸 git 存储库的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6151712/