协慌网

登录 贡献 社区

如何 `git clone` 包括子模块?

我正在尝试将子模块放入回购。

问题是当我克隆父 repo 时,子模块文件夹是完全空的。

是否有任何方法可以使'git clone parent' 实际将数据放入子模块文件夹中?

例如: http//github.com/cwolves/sequelize/tree/master/lib/

nodejs-mysql-native指向外部 git,但是当我签出sequelize项目时,该文件夹为空...

答案

使用 Git 的 2.13 及更高版本, --recursive已被弃用, --recurse-submodules应该使用:

git clone --recurse-submodules -j8 git://github.com/foo/bar.git
cd bar

编者注: -j8是一个可选的性能优化,在 2.8 版本中可用,并且一次最多可以获取 8 -j8模块 - 参见man git-clone

使用版本 1.9 的 Git 直到版本 2.12( -j标志仅在 2.8 + 版本中可用):

git clone --recursive -j8 git://github.com/foo/bar.git
cd bar

使用 Git 及更高版本的 1.6.5 版,您可以使用:

git clone --recursive git://github.com/foo/bar.git
cd bar

对于已经克隆的 repos 或较旧的 Git 版本,请使用:

git clone git://github.com/foo/bar.git
cd bar
git submodule update --init --recursive

在填充子模块之前,您必须做两件事:

git submodule init 
git submodule update

原始答案 2010

正如joschi在评论中提到的那样, git submodule现在支持--recursive选项(Git1.6.5 和更多)。

如果指定了--recursive ,则此命令将递归到已注册的子模块中,并更新其中的任何嵌套子模块。

请参阅 init 部分递归使用 git 子模块
有关详细信息,请参阅git submodule

使用 1.6.5 版本的 git 及更高版本,您可以通过使用–-recursive选项克隆超级项目来自动执行此操作:

git clone --recursive git://github.com/mysociety/whatdotheyknow.git

使用 git 2.8 更新 2016:请参阅 “ 如何使用git clone --recursive加速 / 并行化 git 子模块的下载git clone --recursive

您可以并行使用多个线程启动子模块。
为实例:

git fetch --recurse-submodules -j2