# git使用Socks5代理的合理配置

# 背景

国内从github中clone实在太慢了,而且还经常压根连不上。

于是就想着干脆通过代理吧,参考网上的一些方法,总结一下git使用Socks5代理的合理设置。

# 需求

先总结一下我对git使用代理的需求:

  • 支持ssh://https://两种协议
  • 仅clone github时使用代理,其他地址比如公司内部的gitlab地址不使用代理

# 设置

# ssh://协议

通过我个人亲测,针对ssh://协议最简单的方式还是通过gotoh/connect来指定代理命令(ProxyCommand)。

# 安装connect

gotoh/connect的安装比较简单,通过brewyumapt-get等安装包工具都可以安装。实在不行的话,还可以自己编译,反正就一个connect.c文件。

# ssh配置

$HOME/.ssh/目录下编辑/新增一个名为config文件,配置如下:

Host github.com
    User git
    ProxyCommand connect -S <your-proxy-host>:<your-proxy-port> %h %p

其中的<your-proxy-host>是你的代理服务器IP/主机名;<your-proxy-port>是你的代理服务器监听的端口。

然后需要修改一下你这个$HOME/.ssh/config文件的权限:

chmod 755 $HOME/.ssh/config

经过上述的配置,现在我们clone走ssh://协议的github仓库时就可以走代理了。

# https://协议

https://协议比较坑,走了一些弯路,问题主要是很多人都说类似的配置:

git config --global https.proxy http://proxy.com:1234

其实就也就是在$HOME/.gitconfig下加类似如下两行:

[https]
    proxy = http://proxy.com:1234

但实事证明,这样设置是完全没有用的!!!

经过我的反复尝试,最后竟然是这样设置:

git config --global http.proxy http://proxy.com:1234

也就是即使是走https://协议的代理,但也得设置到http上。

另外,我们还是希望只有github时才走代理,因此整个设置就是如下:

[http]
    sslverify = false
[http "https://github.com/"]
    proxy = socks5h://<your-proxy-host>:<your-proxy-port>

另外,注意一下这里我使用的是socks5h://,而不是socks5://,当然使用socks5://也可以,两者的区别在于socks5h://使用的是代理服务器上的DNS解析,socks5://使用的是本机的DNS解析。

TIP

只有当git 1.8.5开始才能支持可以针对为每个URL配置不同的代理git 1.8.5 RelNotes

# 参考