问题描述
在找开源项目时,准备clone Github上著名的开源项目halo时发现git clone失败,具体报错如下:
Error:RPC failed;curl 56 OpenSSLSSL_read:Connection was Reset, errno 10054
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
具体如下图:
解决方案
在检索解决方案的时候找到了多种方案:
方案一:本解决方案为Stackoverflow上的高分回答。
原回答如下:
(我要是没记错的话应该在 git config之前要先进行一次git init)
First, turn off compression:
git config --global core.compression 0
Next, let's do a partial clone to truncate the amount of info coming down:
git clone --depth 1
When that works, go into the new directory and retrieve the rest of the clone:
git fetch --unshallow
or, alternately,
git fetch --depth=2147483647
Now, do a regular pull:
git pull --all
I think there is a glitch with msysgit in the 1.8.x versions that exacerbates these symptoms, so another option is to try with an earlier version of git (<= 1.8.3, I think).
这一套三板斧下来,应该可以解决80%的情况(其他答主所言),但是由于我最开始只在CSDN上看到解决方案,只进行了第一步问题并未得到解决。
方案二:本方案为最后解决笔者问题的方案(同样源于Stackoverflow)
With this kind of error, I usually start by raising the postBuffer size by:(即增大postBuffer的值,524288000比特就是500兆的大小)
git config --global http.postBuffer 524288000
(some comments below report having to double the value):
git config --global http.postBuffer 1048576000
原因
虽然可以clone项目了,但是不清楚error产生具体原因仍然未解决我们遇到的问题。
From the git config man page, http.postBuffer is about:
Maximum size in bytes of the buffer used by smart HTTP transports when POSTing data to the remote system.For requests larger than this buffer size, HTTP/1.1 and Transfer-Encoding: chunked is used to avoid creating a massive pack file locally. Default is 1 MiB, which is sufficient for most requests.
按照笔者的理解翻译一下,大致是说:
http.postBuffer就是指HTTP协议在传输数据到远端时缓冲区容纳容量的最大比特数,对于请求超过了缓冲区大小的请求,HTTP/1.1和Transfer-Encoding: chunked会被用来避免在本地创建一个大文件。系统默认值是1兆比特,对于大多数请求而言是足够的。
即使是clone项目,也可能产生影响,目前来看error大概率是因为这个原因产生的。
StackOverflow的提问在这里。
由于笔者也是初学者,文中涉及的问题和疏漏之处请多指点,关于产生问题的原因后续查阅也会继续补充。
多谢!