首页 文章

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

提问于
浏览
1579

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

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

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

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

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

10 回答

  • 8

    迟到的答案

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

    因为我花了整整一个小时与朋友一起摆弄:即使你有BitBucket的管理员权限,也要克隆ORIGINAL存储库并使用拥有repo的人的密码 . 很恼火,发现你遇到了这个陷阱:P

  • 156

    试试这个:

    git clone --recurse-submodules
    

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

  • 28

    原始答案2010

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

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

    有关init部分,请参阅Working with git submodules recursively .
    有关更多信息,请参阅 git submodule explained .

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

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

    使用git 2.8更新2016:请参阅“How to speed up / parallelize downloads of git submodules using git clone --recursive?

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

    git fetch --recurse-submodules -j2
    
  • 48

    试试这个在git仓库中包含子模块 .

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

    or

    git clone --recurse-submodules
    
  • 17

    试试这个 .

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

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

  • 389

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

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

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

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

    根据Git团队的说法,这可以大大加快更新包含许多子模块的存储库 . 当使用--recurse-submodules而不使用新的--jobs选项时,Git将逐个获取子模块 .

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

  • 13

    使用Git及更高版本的2.13版本,可以使用 --recurse-submodules 而不是 --recursive

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

    编者注:-j8是一个可选的性能优化,在2.8版本中可用,并且一次最多可以获取8个子模块 - 参见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
    
  • 1

    您可以使用此命令克隆包含所有子模块的repo:

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

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

    git submodule init
    git submodule update
    
  • 2475

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

    git submodule init 
    git submodule update
    

相关问题