克隆整个项目及其所有子模块很容易:
git clone --recursive git@github.com:homer/powerplant.git
但是,如何创建一个克隆,将所有这些子模块替换为各个子存储库本身的 HEAD?最好以这样一种方式,一旦发生变化,这可以很容易地重复。目标应该是相同整体代码的只读“平面”版本。不需要合并。
如果这是可能的,它将解决我的 Launchpad 问题,即bzr
只能导入没有子模块的存储库。
克隆整个项目及其所有子模块很容易:
git clone --recursive git@github.com:homer/powerplant.git
但是,如何创建一个克隆,将所有这些子模块替换为各个子存储库本身的 HEAD?最好以这样一种方式,一旦发生变化,这可以很容易地重复。目标应该是相同整体代码的只读“平面”版本。不需要合并。
如果这是可能的,它将解决我的 Launchpad 问题,即bzr
只能导入没有子模块的存储库。
如果你想从子模块的文件开始而不是 git repos,只需执行以下操作:
git clone --recursive git@github.com:homer/powerplant.git
(疯狂的回购名称顺便说一句)git config --remove-section submodule.name
你最终会得到你想要的,工作树中的子模块文件,但子模块没有这样初始化。
您可以使用最新的git submodule deinit
命令,但它也会从工作树中删除子模块的文件。
你不能直接这样做,因为子模块永远不会被 HEAD
. 这是一个 Git 功能,可以防止在依赖项中进行不必要的更新,因此超级项目以固定的 SHA1 引用子模块,可以通过(在超级项目中)提交新的来更改子模块。
但是,在克隆之后将子模块更新到最新版本很简单:在超级项目中运行以下命令。
git submodule foreach git merge origin/master
git commit -am "updated all submodules to origin/master"
编辑
看起来你想在克隆后检查子模块,命令是
git submodule update --init --recursive