Android source由repo管理。使用repo进行同步时,会创建一个名为.repo/projects/
的目录,其中包含所有直接在当前工作目录中检出的git存储库,只是以裸git格式。
repo维护裸git存储库的目的是什么?这些裸仓库如何被repo使用?
(注意:澄清:当我写“repo”时,我不是在谈论git存储库,我特别谈到由/为Android创建的用于维护所有git存储库的脚本repo
包含Android源代码。)
答案 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文件夹放在工作副本的所有文件夹中并将基本修订文件放入其中来实现。