我有一个非常老的git项目,我在上面做了一个git fsck
。
我收到以下输出:
git fsck --full
Prüfe Objekt-Verzeichnisse: 100% (256/256), Fertig.
Prüfe Objekte: 100% (35666/35666), Fertig.
error in blob 5ac33d03cc28290156dcd17cf8a4efd95adee7b9: gitmodulesPath: disallowed submodule path: --force
dangling blob dc3821dca2a21a6253c929915011e5b1be932203
深入了解当前状态后,我还检查了.gitmodules
文件的历史记录,因为当前版本没有错误。
一年多以前,我发现一个提交包含以下.gitmodules
内容:
[submodule "--force"]
path = --force
url = git@gitlab.mygitserver.com:mygroup/myproject.git
在下一次提交中,此子模块再次被删除。所以显然有人在尝试某些子模块的工作方式。现在的问题是,在项目历史中。
git fsck
是否真的检查历史记录中的每个.gitmodules
文件是否随时都有错误?
我该如何解决呢?
答案 0 :(得分:0)
遇到相同的问题,并且能够删除错误消息。
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (686/686), done.
error in blob 6d244aeea44652df31a9a243a339608c7ba0ee5d: gitmodulesPath: disallowed submodule path: --force
有人添加了一个名为“ --force”的子模块,然后将其删除,但是当然它仍在历史中。
解决方案(您可能要在尝试此操作之前备份您的存储库...):
git log --all --full-history -- "--force"
帮助了我)git rebase -i <commit-hash-1-before>
)丢弃它(确保在所有分支中都放弃提交)
现在,您应该有一个“悬挂的斑点”,它不属于任何提交。此时git fsck
仍报告错误。
为了摆脱斑点:
git reflog expire --expire=now --all
(不是100%确保要求此内容)git gc --prune=now
瞧,
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (545/545), done.