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

4

情况:

我有一个包含子模块的代码库。

像我这样的普通人没有此子模块的读取权限,这并不是问题,因为该子模块对于项目运行并不是必须的。

我的问题是,每次我检出代码时,都会报错告诉我子模块更新失败,因为无法读取子模块远程信息:

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 已更改,并在检出时再次给出原始的 .gitmodules。
我的问题是:如何抑制这些错误并完全忽略本地的子模块存在... 即包括所有试图重新引入它的远程更改?
请注意:请假设解决方案必须留在我的端上,并且不需要对远程端进行任何更改... 因为他们不会发生(已经尝试与 repo 管理员交谈)。

“no read permission for submodule”是什么意思?您使用git submodule克隆了项目并进行了更新和初始化吗?如果您执行git submodule deinit -f .,然后再进行拉取会发生什么?您能否在本地机器上复制此操作(更改所有者并删除对子模块存储库的访问权限)? - JustMe
我的意思是,我无法访问子模块的远程部分,因为我只收到了权限被拒绝的响应。不,我从未能够在此项目中执行 submodule update & init,因为无法读取远程内容。通过执行 git submodule deinit -f . 成功将其从配置中删除,并对现在缺失的子模块路径使用 assume unchanged 似乎可以解决问题(还将子模块路径和 .gitmodules 添加到了 .git/info/exclude 中)...这似乎有效(至少在 Linux 上),我可以在几个小时内测试它是否也可以解决 Windows 上的问题。 - Fabian N.
2个回答

4

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

git submodule deinit -f .

如果有人在这里遇到问题,可以从文档中找到答案,在初始化时,子模块上实际执行了git pull。因此,如果您没有权限访问远程子模块存储库,则本地git没有主分支,无法检出提交,这就是错误消息背后的含义。


更新:如果您使用类似SourceTree或SmartGit的GUI,请检查存储库设置并禁用子模块的自动更新。
根据您的设置,仅禁用“初始化新子模块”可能已经解决了问题:

enter image description here


2
另一种选择是使用以下命令: git config --global submodule.<module>.update none 其中,<module> 是您想要更新的子模块的名称。
将值设置为none表示不会检出或更新子模块。由于这是全局设置,因此将适用于所有仓库。
来源:此处

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