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

时间:2011-05-27 11:38:02

标签: android git repository android-source git-bare

Android sourcerepo管理。使用repo进行同步时,会创建一个名为.repo/projects/的目录,其中包含所有直接在当前工作目录中检出的git存储库,只是以裸git格式。

repo维护裸git存储库的目的是什么?这些裸仓库如何被repo使用?

(注意:澄清:当我写“repo”时,我不是在谈论git存储库,我特别谈到由/为Android创建的用于维护所有git存储库的脚本repo包含Android源代码。)

3 个答案:

答案 0 :(得分:5)

使用Android repo清单系统一段时间后,我想我现在了解.repo/projects/目录中裸存储库的用途。

正如@Fredrik已经回答的那样,项目没有直接在repo创建的“克隆”中表示的另一个存储库副本。实际上,克隆中所有.git目录的内容都只是符号链接,如下所示:

$ 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的原因。清单系统是一种指定将要检出的gits集合的方法,以及它们将在哪个版本中检出。清单文件本身是在git中维护的,repo命令允许您根据需要更改该清单git的分支。

因此,为了允许(快速)方式根据清单文件中当前选取的内容删除和添加gits,repo可以保留您在.repo/projects文件夹中克隆的所有gits,然后仅如果在清单文件的当前分支中选择它们,则将它们复制到“正常”克隆区域。

答案 1 :(得分:4)

这不是两个副本,组件中的.git文件夹包含./repo/projects

中相应组件的符号链接

答案 2 :(得分:0)

免责声明:我与Git的专家相差甚远。

我想你说的是,当你结帐代码时,你会得到两份副本。一个是工作副本(您指定应将其复制到的位置),另一个保存在.repo / projects中。假设我已正确解释了这个问题,我最好的猜测是保留.repo / projects中的副本,以便您可以快速进行比较并恢复到您检出的基本修订版,而无需返回服务器。我认为VCS很常见。 SVN通过将.svn文件夹放在工作副本的所有文件夹中并将基本修订文件放入其中来实现。