You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复GitHub仓库文件损坏问题:inflate returned -3

问题

推送包含PDF/DjVu文件的GitHub仓库时,反复出现如下错误:

Enumerating objects: 153, done.
Counting objects: 100% (153/153), done.
Delta compression using up to 8 threads
Compressing objects: 100% (152/152), done.
remote: error: inflate: data stream error (incorrect data check)
remote: fatal: pack has bad object at offset 909244: inflate returned -3
error: remote unpack failed: index-pack abnormal exit
To github.com:A-GitHub-Organisation/Algebraic-Geometry.git
! \[remote rejected\] main -> main (failed)
error: failed to push some refs to 'github.com:A-GitHub-Organisation/Algebraic-Geometry.git'

推测问题源于仓库在NAS存储一年多后,文件(非仅.git文件夹)出现轻微损坏,尽管文件仍可在evince、zathura等阅读器正常打开。

已尝试的无效方案

  • 新建仓库并迁移所有文件
  • 执行git gc、git gc --aggressive、git-repair、git fsck --full命令

当前可行但繁琐的方法

先执行git add .;git commit -m "something"提交文件,再运行watch -d -n 2 'git push'反复尝试推送,经过1-10+次尝试后推送可成功,且所需尝试次数与提交大小成正比。

原因分析

这个错误的核心是远程Git服务器解压推送的pack文件时校验失败:

  1. 本地仓库的Git对象或待推送的二进制文件(PDF/DjVu)存在隐性损坏——阅读器具备容错机制,能忽略微小的二进制流错误,但Git对对象的CRC校验极其严格,这类隐性损坏会导致远程解压时校验不通过。
  2. NAS长期存储可能出现磁盘扇区轻微损坏、文件系统静默数据错误或缓存一致性问题,进而引发文件的隐性损坏。

修复方案

1. 重新生成本地Git对象

  • 先备份当前仓库(避免操作失误)
  • 清空本地缓存并重新追踪所有文件,让Git重新计算文件哈希、生成全新对象:
    git rm -r --cached .
    git add .
    git commit -m "Rebuild all file objects"
    

2. 强制清理并重新打包本地对象

  • 删除.git/objects/pack/目录下所有.pack和.idx文件
  • 执行重新打包命令,生成无损坏的pack文件:
    git repack -a -d -f
    

3. 修复二进制文件本身的隐性损坏

针对PDF/DjVu文件重新生成,去除潜在的二进制错误:

  • PDF:使用pdftk input.pdf output fixed.pdf重新生成(需安装pdftk工具),替换原文件后提交
  • DjVu:使用djvudigital input.djvu fixed.djvu重新编码,替换原文件后提交

4. 临时禁用Delta压缩推送

如果上述方法无效,可关闭Git的Delta压缩,避免压缩损坏文件导致校验失败:

git config --global core.compression 0
git push

推送完成后可恢复默认压缩值:git config --global core.compression 6

内容的提问来源于stack exchange,提问作者Emily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:33