当我接近我的配额时,我做了一个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为零字节;删除它没有解决我的问题(相同的错误)。
答案 0 :(得分:36)
通常,修复损坏的对象可能非常困难。但是,在这种情况下,我们确信问题是中止传输,这意味着对象位于远程存储库中,因此我们应该能够安全地删除我们的副本并让git从远程获取它,这次正确
显然可以删除临时对象文件,其大小为零。这对我们没有好处。引用它的腐败对象d4a0e75...
是我们真正的问题。它可以在.git/objects/d4/a0e75...
中找到。正如我上面所说,移除它是安全的,但为了以防万一,先备份它。
此时,新的git pull
应该会成功。
......假设它首先会取得成功。在这种情况下,似乎某些本地修改阻止了尝试合并,因此stash
,pull
,stash pop
是有序的。但是,任何合并都可能发生这种情况,并且与损坏的对象没有任何关系。 (除非有必要进行一些索引清理,并且存储在此过程中执行了...但我不相信。)
答案 1 :(得分:23)
您可以使用"查找"使用以下命令删除{0}大小的/objects
文件夹中的所有文件:
find .git/objects/ -size 0 -delete
建议备份。
答案 2 :(得分:7)
Recovering from Repository Corruption是正式答案。
真正简短的回答是:找到未损坏的对象并复制它们。
答案 3 :(得分:0)
对于遇到相同问题的任何人:
我通过在另一个位置再次克隆仓库来解决了这个问题。然后,我将整个src目录(显然没有.git目录)从损坏的存储库复制到新克隆的存储库中。因此,我拥有了所有最近的更改以及一个干净且可以使用的存储库。
答案 4 :(得分:0)
唯一对我有用的是删除git repo并重新配置它:
rm -rf .git
git remote set-url origin <repo-url>