我在本地计算机上遇到git存储库的大问题.
我修改了一个文件,运行git status并且文件显示为已修改.我添加了文件git add .,它像往常一样工作.但是当我即将提交更改时,我收到以下错误:
error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea'
fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted
Run Code Online (Sandbox Code Playgroud)
通过运行git cat-file -t e91ce852822d32e380ed7ddd04c93066e3c600ea,我可以看到该对象是一棵树.
我已经看到了几个关于如何修复损坏的blob或提交的解决方案,但这是一棵树,我找不到可能出错的答案,或者如何修复它.
任何帮助赞赏:)
如果您的 git repo 与外部资源 (Github) 同步,并且任何解决方案不起作用,您可以重新初始化您的 repo
我做了什么:
# copy the corrupted .git dir
mv -f .git .gitback
git init
# keep your config file
cp .gitback/config .git/config
# load objects
git pull
Run Code Online (Sandbox Code Playgroud)
有效。显然,这不是一个很好的解决方案,但它可以提供帮助
很难判断到底出了什么问题,这取决于您的 Git 版本和环境。
例如,在过去,git1.5.1 存在一个 zlib 问题,由于设置而触发了此类消息legacyheaders = false。
至于从松散对象恢复树,这个SO答案“如何恢复因硬盘故障损坏的Git对象? ”说明了一种方法,之后执行了git fsck --full(正如Mark Rushakoff在评论中提到的)。
git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee
Run Code Online (Sandbox Code Playgroud)
并检查对象的类型。
如果类型是树:您可以使用“git ls-tree”从以前的备份中恢复树;然后 '
git mktree' 将其再次写入当前存储库中。
但是假设在旧包或存储库备份中找到这些对象。