克隆一个包含所有子模块的git代码库

18

我有一个包含多个子模块的工作中的git存储库(通过克隆不同的存储库获取)。

现在,我想通过推送或克隆将整个存储库(包括所有子模块)复制到另一台计算机上的裸git存储库中。我可以放弃子模块的历史记录(只对它们的内容感兴趣)。

这是可能的吗?在我的尝试中,克隆的存储库中子模块目录为空。

P.S. 我知道这不是正确的工作流程(参见创建具有子模块的公共存储库),但没有更新原始子模块的可能性。

2个回答

27

您可以使用以下命令以recursive方式克隆带有所有子模块的git仓库:

git clone --recursive your-repo-url

另一方面,如果您已经克隆了,可以使用:

git submodule init
git submodule update

你的子模块中不会丢失任何历史记录


3
在克隆的代码库中,子模块目录为空。
如果你指的是裸仓库(bare repo),那么这是正常的:裸仓库总是为空。
如果你指的是裸仓库的克隆,你需要添加以下内容:
git submodule update --init --recursive

这样,您将看到这些子模块的内容。


请记住,子模块是:

  • .gitmodules文件中声明的
  • 索引中的gitlink条目(记录该子模块的SHA1的特殊条目)

因此,您所需做的就是克隆该存储库(甚至可以使用--recursive选项),然后子模块将跟随。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接