2015-06-10 60 views
3

我想克隆一个混帐回购协议[1],已在.gitmodules定义一个子模块:递归克隆一个git回购不拉子模

[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与克隆到它的第二个回购。但是,没有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'

回答

2

任何想法我做错了吗?

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

Submodules are defined by two things

子模块从主存储库的所谓gitlink树条目是指一种特定的内存储库是完全分开的内commit对象组成。 .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" 
    

git commit输出应显示PointInCircle被添加与模式160000(指示gitlink),和存储库现在应正确配置。使用git submodule status可以肯定:

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

你可能想开一个拉请求与修复的父版本库,但由于它仅包含从三年前的一个承诺,我怀疑这是被遗弃的。