赞
踩
我正在尝试将子模块放入存储库中。 问题是当我克隆父仓库时,子模块文件夹完全为空。
有什么方法可以使git clone parent_repo
实际上将数据放入子模块文件夹中吗?
例如, http : nodejs-mysql-native
指向外部git子模块,但是当我检出sequelize
项目时,该文件夹为空。
尝试这个:
git clone --recurse-submodules
假设您已经将子模块添加到父项目中,它将自动提取子模块数据。
迟来的答案
- // git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY
- git clone --recursive https://USERNAME@bitbucket.org/USERNAME/REPO.git DESTINATION_DIR
正如我整整整整花了一个小时摆弄一个朋友:即使您对BitBucket拥有管理员权限,也请始终克隆ORIGINAL存储库,并使用拥有该存储库的密码。 烦人的发现您遇到了这个陷阱:P
子模块并行获取旨在通过一次启用多个存储库来减少获取存储库及其所有相关子模块所需的时间。 这可以通过使用新的--jobs选项来完成,例如:
git fetch --recurse-submodules --jobs=4
根据Git团队的说法,这可以大大加快更新包含许多子模块的存储库的速度。 在不使用新的--jobs选项的情况下使用--recurse-submodules时,Git将一一读取子模块。
资料来源: http : //www.infoq.com/news/2016/03/git28-released
在填充子模块之前,您必须做两件事:
- git submodule init
- git submodule update
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
- gitster
在commit 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
。
在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
您可以使用以下命令克隆所有子模块的仓库:
git clone --recursive YOUR-GIT-REPO-URL
或者,如果您已经克隆了项目,则可以使用:
- git submodule init
- git submodule update
尝试将此操作包含在git存储库中。
git clone -b <branch_name> --recursive <remote> <directory>
要么
git clone --recurse-submodules
尝试这个。
git clone -b <branch_name> --recursive <remote> <directory>
如果已将子模块添加到分支中,请确保将其添加到clone命令。
我认为您可以执行3个步骤:
- git clone
- git submodule init
- git submodule update
克隆存储库时,可以使用--recursive
标志。 此参数强制git克隆存储库中所有已定义的子模块。
git clone --recursive git@repo.org:your_repo.git
克隆后,有时可能会更改子模块分支,因此请在其后运行以下命令:
git submodule foreach "git checkout master"
克隆父仓库(包含一些子模块仓库)后,请执行以下操作:
git submodule update --init --recursive
如果这是一个新项目,只需执行以下操作:
$ 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
我对GitHub存储库有同样的问题。 我的帐户缺少SSH密钥。 这个过程是
然后,您可以使用子模块克隆存储库( git clone --recursive YOUR-GIT-REPO-URL
)
要么
运行git submodule init
和git submodule update
来获取已经克隆的存储库中的子模块。
如果您的子模块已添加到分支中,请确保将其包含在克隆命令中...
git clone -b <branch_name> --recursive <remote> <directory>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。