如何克隆git存储库,以便它也克隆其子模块?

运行gitclone$REPO_URL只会创建空的子模块目录。


当前回答

克隆存储库时,可以使用--recursive标志。此参数强制git克隆存储库中所有已定义的子模块。

git clone --recursive git@repo.org:your_repo.git

克隆后,有时子模块分支可能会发生更改,因此在其之后运行以下命令:

git submodule foreach "git checkout master"

其他回答

如果子模块被添加到分支中,请确保将其包含在克隆命令中。。。

git clone -b <branch_name> --recursive <remote> <directory>

子模块并行获取旨在通过同时获取多个存储库来减少获取存储库及其所有相关子模块所需的时间。这可以通过使用新的--jobs选项来完成,例如:

git fetch --recurse-submodules --jobs=4

根据Git团队的说法,这可以大大加快包含许多子模块的存储库的更新速度。当在没有新的--jobs选项的情况下使用--recurse子模块时,Git将逐个获取子模块。

资料来源:http://www.infoq.com/news/2016/03/git28-released

使用此命令克隆所有子模块的repo

git clone --recurse-submodules git@gitlab.staging-host.com:yourproject

更新所有子模块的代码

git submodule update --recursive --remote

只需在项目目录中执行这些操作。

$ git submodule init
$ git submodule update

我在GitHub存储库中遇到了同样的问题。我的帐户缺少SSH密钥。该过程是

生成SSH密钥向GitHub帐户添加新的SSH密钥

然后,您可以使用子模块克隆存储库(gitclone--递归YOUR-git-REPO-URL)

or

运行gitsubmodule init和gitsubmodule update以获取已克隆存储库中的子模块。