跳到主要内容

提升 git 速度的几个加速方法

最近经常需要从github上拉代码下来,速度实在是太慢了。所以写这篇文件,来好好总结一下提速的方法。

总的来说,方法有 替换 镜像源/修改hosts/使用国内托管平台/使用代理

经过实验下来,使用代理的效果最好

使用镜像源(推荐)

参考 知乎Don.hub

替换 github 镜像网站,把 github.com 替换成 github.com.cnpmjs.org

https://github.com/graykode/nlp-tutorial
https://github.com.cnpmjs.org/graykode/nlp-tutorial

这个方法最简单,提速效果还是很明显的。当然缺点也是很明显的,就是如果是一些不知名的项目,就没有对应的镜像源可以用了。

修改hosts(不推荐)

DNS污染是GFW的一个重要手段,通过修改 hosts 文件来直接绕过DNS解析是一个不错的方法。这是一个主流的解决方法,但是实测下来效果并不显著。

第一步: 找到以下两个域名对应最快的 ip 地址

查 ip 地址: https://www.ipaddress.com

github.global.ssl.fastly.net  
github.com

第二步: 将找到的对应的 ip 添加至 hosts ( 地址: /etc/hosts)

# 举个例子
213.54.23.32 github.global.ssl.fastly.net
212.44.53.42 github.com

使用国内托管平台

通过国内托管平台,如码云 gitee/阿里云/oschaina 等作为中转,将代码 fork 到自己的仓库下。然后去 clone 对应仓库的repo,基本可以到达满速。

搬运教程:https://zhuanlan.zhihu.com/p/111697412

这也是一个不错的方法,就是稍微有点烦。而且对于小白来说,还容易碰到一个问题是,在使用 SSH 方式拉代码的话,需要碰到多个秘钥管理的麻烦事情。

代理服务器(选择方案)

最后我采用的是这个方案,参考 这篇教程。如果你手里有一台海外的VPS,就非常简单。

本地代理加速

第一步: 查看你的连接工具的监听端口

连接 VPS 的工具各不相同,这里以最常使用的 shadowssocks 为例,选择 偏好设置->高级 就可以查看 socks5 监听的端口。

image-20221203130622843

第二步:设置代理转发的端口

设置全局代理

全局代理设置后,所有 git 的 http/https 都会走我们的代理端口

# SOCKS5 协议,1080 端口修改成自己的本地 SOCKS5 代理端口
git config --global http.proxy socks5://127.0.0.1:1080
git config --global https.proxy socks5://127.0.0.1:1080

# HTTP 协议,1081 端口修改成自己的本地 HTTP 代理端口
git config --global http.proxy http://127.0.0.1:1081
git config --global https.proxy https://127.0.0.1:1081

设置局部代理

# SOCKS5 协议,1080 端口修改成自己的本地 SOCKS5 代理端口
git config --global http.https://github.com.proxy socks5://127.0.0.1:1080
git config --global https.https://github.com.proxy socks5://127.0.0.1:1080

# HTTP 协议,1081 端口修改成自己的本地 HTTP 代理端口
git config --global http.https://github.com.proxy https://127.0.0.1:1081
git config --global https.https://github.com.proxy https://127.0.0.1:1081

设置后,我们可以打开 ~/.gitconfig

[http "https://github.com"]
proxy = socks5://127.0.0.1:1080
[https "https://github.com"]
proxy = socks5://127.0.0.1:1080

或者 git config --global -l 查看配置是否生效

http.https://github.com.proxy=socks5://127.0.0.1:1080
https.https://github.com.proxy=socks5://127.0.0.1:1080

取消代理

# 取消局部代理
git config --global --unset http.https://github.com.proxy
git config --global --unset https.https://github.com.proxy
# 取消全局代理
git config --global --unset http.proxy
git config --global --unset https.proxy

远程代理加速

本地代理的话,对于在个人电脑上开发是很有帮助的。但是如果服务器也要 git加速 的话就比较麻烦了,还要在服务器上配置一遍本地代理。与其这样做,不如直接在服务器端开一个代理来的方便。

服务器端的基本配置

# 安装 shadowsocks
sudo pip install shadowsocks
# 创建配置文件
{
"server":"*.*.*.*",
"server_port":***,
+ "local_server":"0.0.0.0", # 默认127.0.0.1
"local_port":1081,
"password":"*****",
"timeout":600,
"method":"aes-256-cfb"
}
# 后台运行
nohup /root/miniconda2/envs/base/bin/sslocal -c ss.json >> ss.log 1>2&

注意: 这里需要添加一行配置,0.0.0.0 表示监听所有端口,原先默认 127.0.0.1 只监听本地端口

P.S. 查看服务器绑定端口的命令: netstat -tunlp

有了远端代理,所有东西突然就方便了很多。所有的配置都只要走 x.x.x.x:1081 转发一下就可以了。因为我们本地的代理并不是会一直开着的,而远端的代理是一直存在的。

缺点

经过测试下来,我的 github 拉代码的速度从 4kb 一下子提到了 100+ kb/s。有人觉得这个速度也并不快,但是实际上已经达到了速度的上线了。

我远端服务器使用的是国内腾讯云的服务器 (学生优惠时候办的),但是只有 1M 的小水管 (带宽的上限制也就是125kb/s) ,所以 git 也到达满速了。

经过这个事情,我比较了一下国内外VPS的价格,发现除了考虑 硬盘/内存 以外,国内外的VPS带宽的差距是真的打。国内的带宽普遍是1/2M的小水管,国外的都能到达 1G。

后续我可能考虑找一个稳定的海外VPS重新搞一下。

Socks5/http/https代理的区别

作者:黎明 链接:https://www.zhihu.com/question/65960461/answer/505625432 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

知乎上看到一个回答

HTTP 代理是基于 HTTP 协议的,属于应用层协议,一般只会代理转发 HTTP 请求,也可以通过CONNECT 方法来实现一般 TCP 的代理转发。

而 Socks5 代理则相对底层一些,属于 会话层协议 ,它直接通过协议握手来进行连接,并直接修改报头来实现转发,所以速度非常快,并且支持对 FTP 甚至是 UDP 进行代理转发,功能比 HTTP 代理要强大很多。

两个代理在 OSI 模型中的位置:

物理层 < 数据链路层 < 网络层 < 传输层 < 会话层[socks5] < 表示层 < 应用层[http]

实际使用时,一般建议是在支持的时候使用 Socks5,不支持 Socks5 的话就用 HTTP。

腾讯云被封

博客写好没一天,我的这个远程代理就被腾讯云检测到了。不知道是哪个"用户"举报的我。为了解决这个方法,我感觉最好的还是买一个国外的VPS。

方案流程图

为了不让腾讯云发现的话,可以选择使用 frp 代理,在腾讯云上做一个端口转发,发到我家里闲置的电脑上,然后在本地搭代理。这样饶了一圈,会特别烦,但是应该可以躲避腾讯云的监控(虽然我不知道怎么被发现的)。

此外,socks5 代理开启的时候,最好要加上演验证策略。

参考资料

Git 命令行加速

Socks5/http/https代理的区别

知乎上还有一位大佬深入整理了一套代理的技术文章

由浅入深写代理(3) -socks5 代理