我可以使用子模块对git存储库进行“深层复制”吗?

时间:2013-10-21 13:31:37

标签: git git-submodules

很容易克隆整个项目及其所有子模块:

git clone --recursive git@github.com:homer/powerplant.git

但是,如何创建一个克隆,其中所有这些子模块都替换为各个子存储库本身的HEAD?优选地,一旦某些东西改变,这可以容易地重复。目标应该是相同整体代码的只读“平面”版本。不需要合并。

如果可以,它将解决我的Launchpad问题,其中bzr只能导入没有子模块的存储库。

2 个答案:

答案 0 :(得分:3)

如果您想从子模块的文件开始而不是以git repos开头,只需执行以下操作:

  • 克隆递归git clone --recursive git@github.com:homer/powerplant.git(疯狂回购名称顺便说一句)
  • 然后使用git config --remove-section submodule.name
  • 取消注册子模块

你最终会得到你想要的东西,工作树中的子模块文件,但子模块没有被初始化。

您可以使用最新的git submodule deinit命令,但它也会从工作树中删除子模块的文件。

答案 1 :(得分:0)

您不能直接执行此操作,因为HEAD永远不会引用子模块。这是一个Git功能,可以防止不必要的依赖更新,因此超级项目在固定的SHA1上引用子模块,可以通过提交(在超级项目中)新的SHA1来更改。

在克隆之后将子模块更新到其上一个修订版很简单:在超级项目中运行以下命令。

git submodule foreach git merge origin/master
git commit -am "updated all submodules to origin/master"

编辑

看起来你想在克隆之后签出子模块,命令是

git submodule update --init --recursive