我如何处理损坏的git对象文件?

当我接近我的配额时,我做了一个git拉,结果(所以我认为),得到一个损坏的文件:

$ git pull walk dffbfa18916a9db95ef8fafc6d7d769c29a445aa fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted $ git fsck --full bad sha1 file: .git/objects/66/b55c76947b1d38983e0944f1e6388c86f07a1b.temp fatal: object d4a0e7599494bfee2b5351113895b43c351496b3 is corrupted $ git cat-file -t d4a0e7599494bfee2b5351113895b43c351496b3 error: unable to find d4a0e7599494bfee2b5351113895b43c351496b3 fatal: git cat-file d4a0e7599494bfee2b5351113895b43c351496b3: bad file 

我怎样才能解决这个腐败?

.git / objects / 66 / b55c76947b1d38983e0944f1e6388c86f07a1b.temp为零字节; 删除它没有任何解决我的问题(相同的错误)。

一般来说,修复损坏的对象可能相当困难。 但是,在这种情况下,我们确信问题是中止传输,这意味着对象位于远程存储库中,所以我们应该能够安全地删除我们的副本,并让git从远程正确地获取它,这次。

临时目标文件,大小为零,显然可以被删除。 这不会对我们有任何好处。 所指的那个腐败的对象,是我们真正的问题。 它可以在.git/objects/d4/a0e75... 。 正如我上面所说,删除将是安全的,但为了以防万一,请先备份它。

在这一点上,一个新的git pull应该成功。

…假设它将首先取得成功。 在这种情况下,似乎一些本地修改阻止了尝试合并,所以stashpullstash pop是为了。 这可能会发生在任何合并,但是,没有任何关系与损坏的对象。 (除非有必要进行索引清理,存储过程是这样做的,但我不这么认为。)

您可以使用“find”命令,通过find .git/objects/ -size 0 -delete命令删除/ objects文件夹中的所有文件。 build议备份。

Repository from Repository Corruption是官方的答案。

真正简短的答案是:find未损坏的对象并复制它们。