提高git clone下载速度并解决git clone失败问题

Posted by Terence Han on 2018-12-19

解决错误

fatal: The remote end hung up unexpectedly

解决方案:

  1. 修改postBuffer

    1
    git config --global http.postBuffer 524288000
  2. 使用ssh协议去clone

提高速度

方法一 使用git://

git clone https://github.com/xxx.git中的https://更换为git://

1
git clone git://serverRepo myRepo

方法二 使用depth参数

仅拉取最新版本

clone的项目的时候,经常都会遇到项目很大,提交历史很长,导致clone的时候花大半天都clone不下来的问题。而且如果直接git clone,必须一次把所有的历史clone下来,否则失败就直接丢弃所有。用git clone 命令去克隆的时候经常导致服务端内存爆满,clone不下来。若不需要去关注以前的版本,可以只clone最新的版本,使用如下命令:

1
git clone --depth=1 git://serverRepo myRepo

git fetch

在使用depth 1参数把最后一个提交clone出来之后,如何一步步获取历史提交呢?既然有只含有部分commit的shadow,就肯定有办法把这个shadow扩展为完整repo的指令,这个指令就是fetch。例如,之前已经clone了depth为1的commit,剩下的就是逐步fetch剩下的commit了。

1
git fetch --depth $depth

depth为1,表示从最新的提交开始,往下获取1个commit(也就是那个最新的commit)

depth为2,表示从最新的提交开始,往下获取2个commit(最新的commit加一个第二新的commit)

以此类推

获取某个分支

如果想获取某个具体的分支,可以使用branch 命令,拉取某个分支的最新版本代码,比如要获取release/1.6.0分支的代码:

1
git clone -b release/1.6.0 --depth=1 git://serverRepo myRepo

方法三 (伪)断点续传

clonefetch都有了depth了,那就可以用depth来对任务进行分割了,记一下上次的depth,每次只要比上次depth多至少1,就可以不断把内容fetch下来了。这个执行出错了,就在上一次成功的depth上面加1,重新执行命令就行了。
脚本地址

方法四 添加域名映射(修改host)

  1. 访问http://github.global.ssl.fastly.net.ipaddress.com/#ipinfo获取cdn域名以及IP地址
  2. 访问http://github.com.ipaddress.com/#ipinfo 获取cdn域名以及IP地址
  3. 将上述获取的IP地址添加到host文件当中
  4. 刷新dns缓存

方法五 使用ss代理

http(s)全局代理

  1. 开启ss代理
  2. 在命令行中执行如下操作:
    1
    2
    git config --global http.proxy http://127.0.0.1:$port
    git config --global https.proxy https://127.0.0.1:$port

1080端口是默认的ss代理端口,可根据配置进行修改

仅对GitHub使用代理

上述方法为使用全局代理,如果挂了全局代理,这样如果需要克隆coding之类的国内仓库,会奇慢无比,所以可以仅对GitHub进行代理

1
2
git config --global http.https://github.com.proxy https://127.0.0.1:$port
git config --global https.https://github.com.proxy https://127.0.0.1:$port

取消代理设置

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

socks5代理

1
2
git config --global http.https://github.com.proxy socks5://127.0.0.1:$port
git config --global https.https://github.com.proxy socks5://127.0.0.1:$port

参考资料
https://blog.csdn.net/zerooffdate/article/details/79348925
https://segmentfault.com/a/1190000016992360
https://www.jianshu.com/p/aa82b43d369e