3

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

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

但是,如何创建一个克隆,将所有这些子模块替换为各个子存储库本身的 HEAD?最好以这样一种方式,一旦发生变化,这可以很容易地重复。目标应该是相同整体代码的只读“平面”版本。不需要合并。

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

4

2 回答 2

4

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

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

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

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

于 2013-11-20T13:16:13.777 回答
2

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

但是,在克隆之后将子模块更新到最新版本很简单:在超级项目中运行以下命令。

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

编辑

看起来你想在克隆后检查子模块,命令是

git submodule update --init --recursive
于 2013-10-21T13:53:20.860 回答