GitHub推送2个文件夹失败,尝试常规方案仍未解决求助
问题背景
尝试推送两个总大小4.06 GiB的文件夹到GitHub仓库,此前推送小文件无异常,但出现以下错误:
Enumerating objects: 150, done.
Counting objects: 100% (150/150), done.
Delta compression using up to 8 threads
Compressing objects: 100% (143/143), done.
error: unable to rewind rpc post data - try increasing http.postBuffer
error: RPC failed; curl 56 ioctl callback returned error 2
send-pack: unexpected disconnect while reading sideband packet
Writing objects: 100% (149/149), 4.06 GiB | 64.68 MiB/s, done.
Total 149 (delta 19), reused 1 (delta 0), pack-reused 0
fatal: the remote end hung up unexpectedly
Everything up-to-date
已尝试以下方案但未解决:
- 执行
git config --global http.version HTTP/1.1后推送,出现HTTP 500错误 - 执行
git config --global http.postBuffer 157286400后推送,仍提示无法重写RPC数据
解决方案
1. 处理超大文件(GitHub单文件限制100MB)
GitHub仓库单文件大小限制为100MB,超过的文件必须用Git LFS处理:
- 先找出仓库中的大文件:
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')" - 用Git LFS跟踪超大文件(替换
*.xxx为实际文件后缀,比如*.zip):git lfs track "*.xxx" git add .gitattributes git commit -m "Track large files with LFS" - 重新执行推送:
git push
2. 拆分推送批次
避免一次性推送全部内容,分批次提交:
- 先推送第一个文件夹:
git add folder1/ git commit -m "Add folder1" git push - 再推送第二个文件夹:
git add folder2/ git commit -m "Add folder2" git push
3. 改用SSH协议推送
HTTP协议传输大文件易断开,切换到SSH协议更稳定:
- 确认本地已配置GitHub SSH密钥(未配置需先生成并添加到GitHub账户)
- 修改远程仓库地址为SSH格式:
git remote set-url origin git@github.com:你的用户名/你的仓库名.git - 执行推送:
git push
4. 调整Git传输超时参数
增大缓冲区并延长超时时间,避免因传输速度慢被断开:
- 设置更大的
http.postBuffer(比如500MB):git config --global http.postBuffer 524288000 - 关闭低速度限制检测:
git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 - 若之前使用代理,先移除代理:
git config --global --unset http.proxy git config --global --unset https.proxy
内容的提问来源于stack exchange,提问作者lavascone

