递归克隆git repo不会拉出子模块

时间:2015-06-10 11:25:22

标签: git git-submodules

我想克隆一个git repo [1],它有.gitmodules中定义的子模块:

[submodule "PointInCircle"]
        path = PointInCircle
        url = https://github.com/midas-journal/midas-journal-843

按照这些问题[2-4],我试过了:

$ git clone --recursive https://github.com/midas-journal/midas-journal-851

如果我理解submodule正确,我显然不应该在midas-journal-851内有一个名为PointInCircle的目录,其中第二个repo克隆到其中。但是,没有创建PointInCircle目录,据我所知,代码没有被克隆到任何地方。为了更好的衡量,我也试过......

$ git submodule init
$ git submodule update

......以及......

$ git submodule update --init --recursive

...和...

$ git submodule foreach --recursive git submodule update --init

...在克隆目录中。每个命令运行时都不会向控制台打印任何内容,我也看不到目录中的任何更改。

任何想法我做错了什么?

[1] https://github.com/midas-journal/midas-journal-851
[2] Cloning a git repo with all submodules
[3] How to `git clone` including submodules?
[4] 'git submodule update --init --recursive' VS 'git submodule foreach --recursive git submodule update --init'

1 个答案:

答案 0 :(得分:2)

  

任何想法我做错了什么?

你没有做错任何事。该存储库的子模块仅部分配置。

Submodules are defined by two things

  

子模块由主存储库中的所谓gitlink树条目组成,该条目引用内部存储库中完全独立的特定提交对象。源树根的.gitmodules ...文件中的记录为子模块分配一个逻辑名称,并描述子模块应从中克隆的默认URL。

此存储库包含.gitmodules个文件,但没有gitlink个对象。

GitHub displays proper submodules with a grey folder icon,此存储库中不存在:

GitHub submodule

由于错误的.gitmodules文件只包含一个条目,因此我建议

  1. 删除.gitmodules文件,

    git rm .gitmodules
    
  2. 正确添加子模块,

    git submodule add https://github.com/midas-journal/midas-journal-843 PointInCircle
    
  3. 并提交。

    git commit -m "Fix PointInCircle submodule"
    
  4. git commit的输出应显示PointInCircle添加模式160000(表示gitlink),现在应正确配置您的存储库。使用git submodule status确保:

    $ git submodule status
    9bc2651367f8cc5f47ac5f6c708db2f9a71d8fd8 PointInCircle (heads/master)
    

    您可能希望使用修复程序向父存储库打开拉取请求,但由于它仅包含三年前的单个提交,因此我怀疑它已被放弃。