递归克隆git仓库时不会拉取子模块。

5

我想克隆一个 Git 仓库 [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

如果我正确理解了子模块,显然我没有,那么在 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] 使用所有子模块克隆git repo
[3] 如何包括子模块进行`git clone`?
[4] 'git submodule update --init --recursive'与'git submodule foreach --recursive git submodule update --init'的区别

1个回答

2

我做错了什么?

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

子模块由两个部分定义:

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

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

GitHub 使用灰色文件夹图标显示适当的子模块, 但该存储库中缺少该图标:

GitHub submodule

由于有问题的 .gitmodules 文件只包含一个条目,在您的情况下,我建议:

  1. deleting the .gitmodules file,

    git rm .gitmodules
    
  2. adding the submodule properly,

    git submodule add https://github.com/midas-journal/midas-journal-843 PointInCircle
    
  3. and committing.

    git commit -m "Fix PointInCircle submodule"
    
git commit 的输出应该显示添加了 PointInCircle,模式为 160000(表示一个 gitlink),你的仓库现在应该已经正确配置。使用 git submodule status 确认一下:
$ git submodule status
9bc2651367f8cc5f47ac5f6c708db2f9a71d8fd8 PointInCircle (heads/master)

你可能想要向父存储库提交拉取请求以修复问题,但由于它只包含三年前的一个提交,我怀疑它已被放弃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接