Git存储库在另一个git存储库中

时间:2010-08-11 09:08:54

标签: git version-control

我有以下目录结构:

  
      
  • G1 /      
        
    • 的.git
    •   
    • 一个
    •   
    • B'/ LI>   
    • C /      
          
      • 的.git
      •   
      • d
      •   
      • ë
      •   
    •   
  •   

如您所见,我在存储库“g1”中设置了存储库“c”。当我使用以下命令时:

git clone g1 g2

我只获得以下目录结构:

  
      
  • G1 /      
        
    • 的.git
    •   
    • 一个
    •   
    • B'/ LI>   
    • C /
    •   
  •   

目录“c”仍为空。有什么想法吗?

2 个答案:

答案 0 :(得分:37)

Submodules(在Pro Git Book中讨论),帮助管理嵌套在主存储库中的存储库:

  

子模块允许外部存储库   嵌入专用的   源树的子目录,   总是指着一个特定的提交。

     

不要混淆他们   遥控器,主要用于   同一个项目的分支机构;   子模块适用于不同的   你想参与的项目   你的源代码树,而历史   这两个项目仍然存在   完全独立,你不能   修改子模块的内容   来自主项目。

     

子模块保持自己的   身份;子模块支持   存储子模块库   位置和提交ID,等等   克隆超级项目的开发人员   可以轻松克隆所有子模块   相同的修订。

答案 1 :(得分:2)

Git 2.5 +(2015年第2季度)在如何呈现子模块方面会更加准确 由于子模块已注册为 gitlink a special entry in the index),因此可解释为什么在克隆父代回购邮件时“c”为空。 另请参阅“git submodule checks out the same commit” 您需要git submodule update --init来填充“c”。

现在更清楚地记录了这一点。

commit ec48a76Stefan Beller (stefanbeller)(2015年5月27日) Junio C Hamano -- gitster --commit 7df5c97中合并,2015年6月11日)

  

submodule doc:重新排序介绍性段落

     

最好启动手册页,其中包含对内容的描述   子模块实际上是,而不是说它们不是什么。

git submodule man page现在(2015年6月)以:

开头
  

子模块允许您将另一个Git存储库保存在子目录中   您的存储库   另一个存储库有自己的历史记录,不会干扰当前存储库的历史记录   这可用于具有外部依赖性,例如第三方库。

     

当克隆或拉出包含子模块的存储库时,   这些不会被默认签出; “init”和“update”   子命令将维护子模块检出和   工作树中的适当修订