Git 子模块因 link 不存在的修订而失败

Git submodule fail because of link to unexisting revision

我遇到了 git 子模块拉取问题:我有两个存储库,我们称它们为存储库 A 和存储库 B。

回购 B 是回购 A 的子模块,因此我使用此命令行将回购 B 添加为 A 的子模块:

git submodule add git@github.com:Aracthor/B.git libvvgl

但是当我尝试像这样克隆我的项目时:

git clone git@github.com:Aracthor/A.git

我的 B 项目文件夹是空的,当我尝试这个时(来自 this answer 的解决方案):

git clone --recursive git@github.com:Aracthor/A.git

我的 B 文件夹只包含一个空文件 .git,它本身只包含一行:

../.git/modules/B/

这是一个文件夹的路径,其中包含一些 git 数据,但仍然不是我的 B 存储库文件。

我也试过了:

git submodule update --init --recursive

没有任何变化。

当我查看我的 Github 存储库 (Here for A and Here for B included) 时,我注意到了一些奇怪的事情:一个存储库正在将其子模块链接到一个修订密钥 (32a0a80f17ee3628cb99b886c68e566981d7deff),该密钥在任何版本上都不存在在 B 存储库上提交,并在单击 Github.

时导致 404

所以从这里看,它看起来像一个 Github 错误...但我更喜欢你的解决方案而不是指责这个平台。

这意味着 A 记录了一个 gitlink (special entry in the index) referencing a SHA1 of the submodule B 从未被推送到 GitHub.

A 在本地克隆中使用 B 时,B 位于 32a0a80A 被推送,但 B 没有。因此这个问题。

通常,git submodule update --init 会使用提交 32a0a80 中的文件填充 B,但由于未推送该提交,该命令也会失败。