android - .repo/projects/由 Android repo 脚本创建的裸 git 存储库的目的是什么?

标签 android git repository android-source git-bare

Android sourcerepo 管理.使用 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/

相关文章:

java - Android JUnit3测试ParcelUuid getUuid()为非空UUID返回null?

java - 停止和启动计时器

java - 无法从 Gradle 中排除模块

android - 从Windows切换到Linux(Ubuntu)后如何继续使用git?

svn - 将存储库与 SVN 混合

svn - 人为增加 SVN (FS FS) 存储库中的修订号

java - 用 Java 解析 XML 文件以获取名称列表

git - Git 和 libgit2 的区别

git - 如何正确设置 Azure DevOps 和 GitHub 之间的双向同步

c# - .Net 2.0 的简单存储库