Git存储库中的Git存储库

时间:2010-12-21 14:28:09

标签: git directory repository clone subdirectory

我有一个主git存储库A,我们在主项目的子目录中使用另一个git存储库B中的源代码。 现在最好在这个使用过的子目录中的A存储库中检出B存储库。 如果其他人然后克隆了存储库,他当然应该获得我们的主存储库A,并在其中自动获取B存储库。

让我看一下目录结构:

+ main_repository       - the root directory of the main Repository
  + src                 - directory containing the source 
    + foreignRepo       - this should be the root directory of another git repo
  + binaries
  + other

这必须在远程存储库中也是已知的,只是本地副本对我没有帮助,因为其他人检查了这一点并且必须能够编译所有东西。

3 个答案:

答案 0 :(得分:24)

您需要了解Git submodules

答案 1 :(得分:6)

您可以在不使用子模块的情况下嵌套两个git repo。假设ChildRepo是ParentRepo的子目录,都是git存储库。

+ ParentRepo
  - ChildRepo

如果您向ChildRepo添加文件,ParentRepo将忽略它。提交时,它将被添加到ChildRepo。无法将ChildRepo中的文件添加到ParentRepo。

更多信息:Nested GIT repo gotchas!

答案 2 :(得分:6)

在git 1.7.11及更高版本中使用git subtreegit subtree is superior to git submodule因为:

  • 简单管理简单的工作流程。旧版本的git是 支持(甚至在v1.5.2之前)
  • 在完成超级项目的克隆后,子项目的代码可用
  • git subtree不要求您的存储库用户学习任何新内容,他们可以忽略您使用子树来管理依赖项的事实
  • git subtree不会添加git submodule之类的新元数据文件(例如 .gitmodule
  • 可以修改子树的内容,而无需在其他地方使用依赖的单独存储库副本

此外,如果您需要detach a subtree of your existing repository into a new repositorygit subtree split可以为您提供帮助。