【问题标题】:What are the purpose of the bare git repositories in .repo/projects/ created by the Android repo script?Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的目的是什么?
【发布时间】:2011-05-27 11:38:02
【问题描述】:

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

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

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

【问题讨论】:

  • 不是两份,组件中的.git文件夹包含指向./repo/projects中对应组件的符号链接
  • @Fredrik 这就是答案;照这样发布。

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


【解决方案1】:

在使用 Android repo manifest 系统一段时间后,我想我现在明白了 .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 和普通 git 的原因在于清单系统的工作方式。清单系统是一种指定要签出的 git 集合以及将在哪个版本中签出的方法。清单文件本身在 git 中维护,repo 命令允许您随意更改该清单 git 的分支。

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

【讨论】:

    【解决方案2】:

    不是两个副本,组件中的.git文件夹包含指向./repo/projects中对应组件的符号链接

    【讨论】:

      【解决方案3】:

      免责声明:我远非 Git 专家。

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

      【讨论】:

      • 嗨,加里,感谢您的回答,但这并不是我要问的。我非常了解 git。因为它是一个分布式版本控制系统,它必须在本地克隆整个版本树,这意味着正常运行不需要外部连接。为此,git 在每个克隆的存储库中创建一个 .git/ 文件夹。我问的不是 .git 文件夹,而是由专门为 Android 创建的名为 repo 的自定义脚本创建的 .repo 文件夹,用于管理包含 Android 源代码的相当大的 git 存储库层次结构。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      相关资源
      最近更新 更多