忽略 git 没有读取权限的子模块

Ignore git submodule without read permission

情况:

我有一个包含子模块的存储库。

普通人(比如我)没有这个子模块的读取权限,这不是真正的问题,因为 运行 项目不需要它。

我的问题是,每次我检查一些东西时,我都会收到错误消息,告诉我子模块更新失败,因为无法读取子模块远程:

fatal: Needed a single revision
Unable to find current revision in submodule path 

不足为奇...

我试图从 .gitmodules 中手动删除它,然后使用

git update-index --assume-unchanged .gitmodules

但这只在下一次结帐之前有效,因为子模块似乎得到了特殊对待。

我尝试将 .gitmodules 放入 .gitignore 或 .git/info/exclude 但 git 忽略了它,报告 .gitmodules 已更改并且结账时又给了我原件。

我的问题:

如何抑制这些错误并在本地完全忽略此子模块的存在...包括所有试图重新引入它的进一步远程更改?


注意:请假设解决方案必须留在我这边并且不需要在远程端进行任何更改...因为它们不会发生(已经尝试与回购管理员)

复制这种情况有点困难,但根据评论中的讨论

git submodule deinit -f .

有帮助。如果有人在这里绊倒,从 documentation 可能会发现在初始化期间,实际 git pull 是在子模块上完成的。因此,如果您没有访问远程子模块存储库的权限,则本地 git 没有 master 分支,也没有要检出的提交,这就是错误消息背后的含义。


更新:如果您使用的是 SourceTree 或 SmartGit 之类的图形用户界面,请检查存储库设置并禁用子模块的自动更新。
根据您的设置,仅禁用 "Initialize new submodules" 可能已经解决了问题: