损坏的git树?

损坏的git树?,git,Git,我在本地机器上的git存储库有大问题 我修改了一个文件,运行了git status,文件显示为已修改。我使用git add.添加了这个文件,它像往常一样工作。但是,当我准备提交更改时,出现了以下错误: error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea' fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted

我在本地机器上的git存储库有大问题

我修改了一个文件,运行了
git status
,文件显示为已修改。我使用
git add.
添加了这个文件,它像往常一样工作。但是,当我准备提交更改时,出现了以下错误:

error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea'
fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted
通过运行git cat file-te91ce852822d32e380ed7ddd04c93066e3c600ea,我可以看到该对象是一个树

我已经看到了几种关于如何修复损坏的blob或commit的解决方案,但这是一棵树,我找不到解决问题的答案,也找不到解决问题的方法


感谢您的任何帮助:)

很难说什么地方出了问题,这取决于您的Git版本和环境。
例如,在过去,由于
legacyheaders=false
settings,会触发此类消息

至于从中恢复树,这个SO答案“”说明了一种方法,之后执行了
git fsck--full
(如注释中所述)

git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee
并检查对象的类型

如果类型为tree:可以使用“git ls tree”从以前的备份中恢复树;然后“
git mktree
”在当前存储库中再次写入它


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

早上好,就我而言,我刚刚删除了git目录,并重新初始化git。

如果您的git repo与外部ressource(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

成功了。显然,这不是一个很好的解决方案,但它可以帮助您运行
git fsck
?是的,同样的错误。然而,这是另一个对象,也是一棵树。@MarkRushakoff:刚刚得到了与Olof相同的错误,
git fsck
只是输出了相同的错误消息。偶然发现了这个问题,但是.git/objects/pack/是空的。如何在旧包中执行搜索?@Olof:旧包?我相信这就是最后一句话“但假设在旧包或存储库备份中找到这些对象”的用意所在。你有备份吗?我有备份,但不幸的是它大约有一个月了。我如何在旧包装中找到它们?我也不能签出一个旧的提交,唯一有效的是git log。@如果reflog有效吗?有可能吗?不,还没有。但我认为出现问题是因为它位于共享网络文件夹中。我对git和共享文件夹了解不多,但这是我唯一能想到的。我们将很快(希望)更改我们的工作流程,以包括本地开发服务器,因此如果共享文件夹出现问题,我们将予以解决。您的意思是删除
.git
目录吗?然后。。。我猜不是
git init
吧?有时候,这就是你所能做的。虽然这不是一个很好的解决方案,但实际上只有在单独的项目上才可以接受:)