如何用我的文件创建新的Git对象来替换损坏的Git对象?

11

我的应用程序在我的文件系统中运行正常,所有测试都通过。

我是一名独立开发者,主要使用Git来使用Heroku并进行备份。

由于损坏的对象,Git已经停止工作。

我正在收到类似于以下错误的错误:

steven-nobles-imac-200:drominay steven$ git push heroku master
error: inflate: data stream error (invalid distance too far back)
fatal: object 990ad2766afa2e2002eea265225ad160e73eacd2 is corrupted
error: pack-objects died with strange error

(还有许多其他错误,全都引用了损坏的对象。)

我该如何让Git丢弃那些损坏的对象,并用从我的应用程序的工作副本构建的新对象替换它们?

Git init并没有解决这个问题。

谢谢!

1个回答

10
你需要使用git-fsck。手册有详细信息,但要点是git-fsck会确保仓库内部一致并列出缺失的对象,然后您可以使用git hash-object -w <correct-file>将给定文件放入仓库。如果给hash-object的文件确实是损坏的文件,则您的仓库现在已经完整了 :)

更新添加:Git Repair做同样的事情,但会自动完成 :)


但是如果所涉及的对象在一个包中,那么这种方法就行不通了,对吧?我该如何告诉 Git 使用恢复的对象而不是包文件中的对象呢? - Frederick Nord
@FrederickNord,现在最好的选择(我已经相应地编辑了我的答案)是使用Joey Hess的git-repair。 - Andrew Aylett

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