本周从git clone下载项目时由于项目过大,http方式报错protocol error: bad pack header,ssh方式报错fatal: early EOF fatal: index-pack failed期间查阅各种资料,也走了不少弯路,在此整理记录一下,特此分享。
问题描述
git clone用http方式下载报错如下:
1
2 3 |
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly fatal: protocol error: bad pack header |
git clone用ssh方式下载报错如下:
SSH公钥配置的也没问题仍然报错
1
2 3 4 5 6 7 8 |
error: pack-objects died of signal 9/5818)
error: git upload-pack: git-pack-objects died with error. fatal: git upload-pack: aborting due to possible repository corruption on the remote side. remote: aborting due to possible repository corruption on the remote side. fatal: early EOF fatal: index-pack failed 错误如下图: |

解决方案
第一种方案
网上说http方式报错protocol error: bad pack header需要配置ssh方式即可解决,但是在我的实际操作过程中,ssh方式爆出然报错fatal: early EOF fatal: index-pack failed等错误。
第二种方案
修改本地的git配置:
1
2 3 4 |
git config –global pack.windowMemory “100m”
git config –global pack.SizeLimit “100m” git config –global pack.threads “1” git config –global pack.window “0” |
第三种方案 浅克隆git clone –depth 1 项目地址
可能是下载的项目工程太大导致的,那我们就下载最近的一次commit就好了,即:git clone –depth 1 项目地址,我出现的现象是很快就下载到100%了,但是下载的是一个空文件夹,什么内容都没有,即下载失败
最终解决方案和原因分析
根据这两种错误,我查到的大部分的解决方案就是浅克隆(git clone –depth)、修改git配置:加大缓存区、修改压缩配置等(git config –global),但是未能解决我的问题,最后在一篇博客评论中看到是应该是git服务有问题,不是本地客户端的问题
需要修改git 服务端的配置,进部署git的服务器,不是打开本地命令窗。在git服务器做如下配置即可解决:
1
2 3 4 |
git config –global pack.windowMemory “100m”
git config –global pack.SizeLimit “100m” git config –global pack.threads “1” git config –global pack.window “0” |
我的解决方式
将问题交给运维那边处理,运维那边说改配置比较麻烦怕影响其他的(我也没理解),只是简单改了一下,让我在试试浅克隆结果总算成功了如下图:
浅克隆存在的问题:
浅克隆只会把默认分支clone下来,其他远程分支并不在本地,所以这种情况下,需要用如下方法拉取其他分支需要进行如下步骤
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
step1: 浅克隆
git clone –depth 1 https://地址/xxxxxxx.git step2: cd 到新下载的项目根目录 step3: 设置远程要拉取的地址 step4: 浅克隆下载此分支 step5:切换到分支 |