我如何处理损坏的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
应该成功。
…假设它将首先取得成功。 在这种情况下,似乎一些本地修改阻止了尝试合并,所以stash
, pull
, stash pop
是为了。 这可能会发生在任何合并,但是,没有任何关系与损坏的对象。 (除非有必要进行索引清理,存储过程是这样做的,但我不这么认为。)
您可以使用“find”命令,通过find .git/objects/ -size 0 -delete
命令删除/ objects文件夹中的所有文件。 build议备份。
Repository from Repository Corruption是官方的答案。
真正简短的答案是:find未损坏的对象并复制它们。