当我接近我的配额时,我做了一个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
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这种腐败?
.git/objects/66/b55c76947b1d38983e0944f1e6388c86f07a1b.temp为零字节; 删除它没有解决我的问题(相同的错误).
Cas*_*bel 36
通常,修复损坏的对象可能非常困难.但是,在这种情况下,我们确信问题是中止传输,这意味着对象位于远程存储库中,因此我们应该能够安全地删除我们的副本并让git从远程获取它,这次正确.
显然可以删除临时对象文件,其大小为零.这对我们没有好处.引用它的腐败对象d4a0e75...
是我们真正的问题.它可以在.git/objects/d4/a0e75...
.正如我上面所说,移除它是安全的,但为了以防万一,先备份它.
在这一点上,一个新鲜的git pull
应该成功.
......假设它首先会成功.在这种情况下,似乎有些本地修改阻止试图合并,因此stash
,pull
,stash pop
是为了.但是,任何合并都可能发生这种情况,并且与损坏的对象没有任何关系.(除非有必要进行一些索引清理,并且存储在此过程中执行了...但我不相信.)
小智 24
您可以使用"find" /objects
使用以下命令删除文件夹中0大小的所有文件:
find .git/objects/ -size 0 -delete
Run Code Online (Sandbox Code Playgroud)
建议备份.
小智 6
对于遇到同样问题的任何人:
我通过在另一个位置再次克隆存储库解决了该问题。然后,我将整个 src 目录(显然没有 .git 目录)从损坏的存储库复制到新克隆的存储库中。因此,我拥有了所有最近的更改和一个干净且有效的存储库。
.git
文件夹git clone url
.git
文件夹).git
文件夹剪切并粘贴到您的工作文件夹中git add .
git commit -m 'update-project'
git push
Run Code Online (Sandbox Code Playgroud)