腐烂的git树?

时间:2010-11-18 10:04:40

标签: git

我的本​​地计算机上的git存储库出现了大问题。

我修改了一个文件,运行git status,文件显示为已修改。我使用git add .添加了文件,它照常工作。但是当我即将提交更改时,我收到以下错误:

error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea'
fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted

通过运行git cat-file -t e91ce852822d32e380ed7ddd04c93066e3c600ea,我可以看到该对象是一棵树。

我已经看到了几个关于如何修复损坏的blob或提交的解决方案,但这是一棵树,我找不到可能出错的答案,或者如何修复它。

任何帮助表示赞赏:)

3 个答案:

答案 0 :(得分:3)

如果你的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

有效。显然,这不是一个很好的解决方案,但它可以帮助

答案 1 :(得分:2)

可能出错的地方很难说,取决于你的Git版本和环境 例如,在过去,zlib issue with git1.5.1legacyheaders = false设置而触发了此类消息。

至于从loose objects恢复树,这个SO答案“How to recover Git objects damaged by hard disk failure?”说明了一种方法,之后git fsck --full(如Mark Rushakoff提及评论)已经完成。

git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee
  

并检查对象的类型。

     

如果类型是树:您可以使用'git ls-tree'从以前的备份中恢复树;然后'git mktree'将它再次写入您当前的存储库。

但是,假设在较旧的包或存储库备份中找到这些对象。

答案 2 :(得分:-2)

早上好,就我而言,我刚刚删除了git目录,并重新启动了git。