如何“ git clone”包括子模块?

我正在尝试将子模块放入存储库中。 问题是当我克隆父仓库时,子模块文件夹完全为空。

有什么方法可以使git clone parent_repo实际上将数据放入子模块文件夹中吗?

例如, http : nodejs-mysql-native指向外部git子模块,但是当我检出sequelize项目时,该文件夹为空。


#1楼

尝试这个:

git clone --recurse-submodules

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


#2楼

迟来的答案

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

正如我整整整整花了一个小时摆弄一个朋友:即使您对BitBucket拥有管理员权限,也请始终克隆ORIGINAL存储库,并使用拥有该存储库的密码。 烦人的发现您遇到了这个陷阱:P


#3楼

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

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

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

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


#4楼

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

git submodule init 
git submodule update

#5楼

Git 2.23(Q3 2019):如果要克隆子模块并将其更新为最新版本,请执行以下操作:

git clone --recurse-submodules --remote-submodules

如果仅要将它们克隆到其记录的SHA1:

git clone --recurse-submodules

见下文。


原始答案2010

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

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

有关init部分,请参见递归使用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 2.23(2019年第三季度),您可以在一个命令中将子模块克隆并签出到其跟踪分支!

参见Ben Avison(``) 提交4c69101 (2019年5月19日
(由Junio C gitster - gitstercommit 9476094中合并 ,2019年6月17日)

clone :添加--remote-submodules标志

当使用git clone --recurse-submodules ,对于您希望子模块在其远程跟踪分支而不是通过它们检出的任何用例,以前无法将--remote开关传递给隐式git submodule update命令。记录在超级项目中的SHA-1。

此补丁纠正了这种情况。
实际上,它也会通过--no-fetch传递到git submodule update ,因为它们只是刚刚克隆了子模块,因此再次从远程获取仅会减慢速度。

这意味着:

--[no-]remote-submodules:

克隆的所有子模块将使用子模块的远程跟踪分支的状态来更新子模块,而不是超级项目的已记录SHA-1。 等效于将--remote传递给git submodule update


#6楼

在Git 2.13及更高版本中,可以使用--recurse-submodules代替--recursive

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

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

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

#7楼

[快速回答]

您可以使用以下命令克隆所有子模块的仓库:

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

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

git submodule init
git submodule update

#8楼

尝试将此操作包含在git存储库中。

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

要么

git clone --recurse-submodules

#9楼

尝试这个。

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

如果已将子模块添加到分支中,请确保将其添加到clone命令。


#10楼

我认为您可以执行3个步骤:

git clone
git submodule init
git submodule update

#11楼

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

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

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

git submodule foreach "git checkout master"

#12楼

[快速回答]

克隆父仓库(包含一些子模块仓库)后,请执行以下操作:

git submodule update --init --recursive

#13楼

如果这是一个新项目,只需执行以下操作:

$ git clone --recurse-submodules https://github.com/chaconinc/YourProjectName 

如果已安装,则:

$ cd YourProjectName (for the cases you are not at right directory) 
$ git submodule init
$ git submodule update

#14楼

我对GitHub存储库有同样的问题。 我的帐户缺少SSH密钥。 这个过程是

  1. 生成SSH密钥
  2. 向您的GitHub帐户添加新的SSH密钥

然后,您可以使用子模块克隆存储库( git clone --recursive YOUR-GIT-REPO-URL

要么

运行git submodule initgit submodule update来获取已经克隆的存储库中的子模块。


#15楼

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

git clone -b <branch_name> --recursive <remote> <directory>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值