如何`git克隆`包括子模块?

我试图把一个子模块放入回购站。

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

有没有办法让'git clone parent'实际上把数据放到子模块文件夹中?

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

nodejs-mysql-native指向一个外部的git,但是当我签出sequelize项目,该文件夹是空的…

使用Git版本1.9及更高版本,您甚至可以同时下载子模块:

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

编者按: 同时在这种情况下是指: 并行 ; 也就是说, -j8是一个可选的性能优化,一次最多可以获取8 -j8模块 – 请参阅man git-clone

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

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

对于已经克隆好的回购版本或旧版本的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 ,则此命令将recursion到注册的子模块中,并更新其中的任何嵌套子模块。

请参阅为init部件recursion地使用git子模块 。
看到更多的解释git submodule

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

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

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

您可以启动使用多个线程并行获取子模块。
例如:

 git fetch --recurse-submodules -j2 

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

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

尝试这个:

 git clone --recurse-submodules 

假设您已经将子模块添加到父项目中,它会自动提取子模块数据。

迟到的答案

 // git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY git clone --recursive https://USERNAME@bitbucket.org/USERNAME/REPO.git DESTINATION_DIR 

正如我刚刚花了一整小时与朋友一起摆弄:即使你有BitBucket的pipe理权限,总是克隆原始存储库,并使用拥有回购的人的密码。 恼人地发现你碰到了这个矿工:P

你可以使用这个命令克隆你的所有子模块的回购:

 git clone --recursive YOUR-GIT-REPO-URL 

或者如果您已经克隆了该项目,则可以使用:

 git submodule init git submodule update 

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

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

根据Git团队,这可以大大加快更新包含许多子模块的存储库。 当使用–recurse子模块而没有新的–jobs选项时,Git会一个一个地提取子模块。

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