Git repository在另一个git repository中

iqjalb3h  于 2023-06-20  发布在  Git
关注(0)|答案(3)|浏览(138)

我有以下目录结构:

  • g1/
  • .git
  • 一种
  • B
    *c/
    *.git
  • 我的天
  • 我的天

正如你所看到的,我在仓库“g1”中有仓库“c”。当我使用以下命令时:
git clone g1 g2
我只得到以下目录结构:

  • g1/
  • .git
  • 一种
  • B
    *c/

目录“c”保持为空。有什么想法吗

wdebmtf2

wdebmtf21#

Submodules(在Pro Git Book中讨论),帮助管理嵌套在主存储库中的存储库:
子模块允许将外部存储库嵌入到源代码树的专用子目录中,始终指向特定的提交。
不要将它们与remote混淆,remote主要用于同一项目的分支;子模块是为不同的项目设计的,你想让它们成为你的源代码树的一部分,而这两个项目的历史仍然保持完全独立,你不能从主项目中修改子模块的内容。
子模块维护自己的标识;子模块支持仅存储子模块存储库位置和提交ID,因此克隆超级项目的其他开发人员可以轻松地克隆同一修订版本的所有子模块。

shstlldc

shstlldc2#

Git 2.5+(Q2 2015)在子模块的呈现方式上会更精确一些。
由于子模块注册为**gitlink**(a special entry in the index),这就解释了为什么在克隆父存储库时'c'为空。
另见“git submodule checks out the same commit”。
您需要一个git submodule update --init来填充'c'。
这一点现在有了更清楚的记录。
参见commit ec48a76(2015年5月27日)Stefan Beller ( stefanbeller )
(由Junio C Hamano -- gitster --合并至commit 7df5c97,2015年6月11日)

submodule文档:重新安排介绍性段落

最好在手册页的开头描述子模块实际上是什么,而不是说明它们不是什么。
git submodule man page现在(2015年6月)开始:
子模块允许您在仓库的子目录中保存另一个Git仓库。
另一个存储库有自己的历史记录,不会干扰当前存储库的历史记录。
这可以用于具有外部依赖性,例如第三方库。

克隆或拉取包含子模块的仓库时,默认不会检出;'init'和'update'子命令将在您的工作树中维护检出的子模块和相应的修订版本

deyfvvtc

deyfvvtc3#

另一种方法是将git repository存储为另一个git repository中的裸库。
当你不控制使用inner git仓库的git流程时,这种方法会很有用。例如,如果第三方工具使用它。在这种情况下,它可能会尝试克隆内部存储库给定的路径。
我将storing git repository inside another git repository的命令记录为一个裸存储库。

相关问题