git clone 失败fatal: early EOF fat
有时候我们需要下载一个文件较多,且文件较大的git项目时候,使用git clone 克隆远程库时,往往会出现失败的情况如下:
git clone提示:
fatal: early EOF
fatal: the remote end hung up unexpectedly
fatal: index-pack failed
网上找了很长时间的解决方案,很多解答都是运行以下命令:
git config http.postBuffer 524288000
在 git bash 上运行上述代码后仍未解决问题,因为此命名的目的是增加缓存空间到500M,这是用于解决上传大小限制的问题,但并不能解决我们遇到的问题。
考虑到可能win10的一些限制,我打算使用linux来重新clone
显示无法连接:
ssh_dispatch_run_fatal: Connection to 13.250.177.223 port 22: Software caused connection abort
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
是怀疑是连接不到github.com了,首先在cmd窗口中,尝试ping一下百度,可以,ping github不可以
因此怀疑是:本地DNS无法解析导致的。
第一步、修改Hosts
通过问题的搜索了解到 github 访问很慢一般通过修改 hosts 文件解决的。
在 Ubuntu18.04 中打开终端,输入命令 sudo vim /etc/hosts ,英文输入法输入 G , vim 编辑器跳到 hosts 文件的最后一行,添加以下几行:
151.101.73.194 github.global.ssl.fastly.net
192.30.253.113 github.com
添加完后,退出 vim 编辑器:按下 Esc 键,英文输入法输入: wq (是" :wq "啊,一定要记得有冒号),回车即可。更新 DNS 缓存,输入 sudo /etc/init.d/networking restart , Mac OS 的话输入 sudo dscacheutil -flushcache 即可更新 DNS 缓存,Windows的话直接用管理员权限修改 C:\Windows\System32\drivers\etc\hosts 文件即可。可能你会遇到无法修改的情况,请参看这里:Windows10没有修改hosts文件权限的解决方案(亲测有效)
修改完成后保存即可。
下面是可以添加的内容,我只添加了两行就可以解决:
#Github151.101.73.194 github.global.ssl.fastly.net151.101.108.133 assets-cdn.github.com185.199.111.153 documentcloud.github.com185.199.110.153 documentcloud.github.com185.199.109.153 documentcloud.github.com185.199.108.153 documentcloud.github.com192.30.253.113 github.com192.30.253.112 github.com192.30.253.119 gist.github.com192.30.253.118 gist.github.com185.199.111.153 help.github.com185.199.110.153 help.github.com185.199.109.153 help.github.com185.199.108.153 help.github.com192.30.253.121 nodeload.github.com192.30.253.120 nodeload.github.com151.101.108.133 raw.github.com18.204.240.114 status.github.com18.211.136.12 status.github.com18.211.136.12 status.github.com192.30.253.166 training.github.com151.101.109.194 github.global.ssl.fastly.net151.101.108.133 avatars0.githubusercontent.com151.101.72.133 avatars1.githubusercontent.com
为了解决访问速度过慢的原因,可以如下处理,未实践
第二步,修改DNS
这样算是完事了?重新访问 github ,发现并没有多大改善,我在想是不是 DNS 缓存的问题?很有可能哦~话不多说,赶紧修改 DNS 文件呀!
修改 DNS 文件
终端内输入 sudo vim /etc/resolv.conf
然后可以注掉本地的 DNS ,添加 DNS ,输入:
nameserver 8.8.8.8nameserver 8.8.4.4nameserver 114.114.114.114
退出 vim 编辑器,同上。
更新 DNS 缓存,同上。
如果你的错误信息包含如下:那么属于SSL问题,可以参考如下处理,未实践过
error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
查看了很多博客,最终确定,这个问题是:
SSL错误
因为服务器的SSL证书没有经过第三方机构的签署,所以才报错。
解决方案如下:
第一步,克隆远程仓库时,用env命令设置GIT_SSL_NO_VERIFY环境变量为”ture”,并同时调用正常的git clone命令。完整的命令如下:
envGIT_SSL_NO_VERIFY=truegitclonehttps://<host_name/git/project.git
第二步,在克隆完毕的仓库中将http.sslVerify设置为”false”。完整的命令如下:
git config http.sslVerify "false"
点评:以上方法应该是Git处理可信任的SSL临时证书很好的方法,第一步使用env命令保证了忽略证书错误是单次行为,不会成为默认的设置。第二次,则把忽略证书错误的设置限定在特定的仓库,避免扩大该设置的适用范围而引起的潜在安全风险。