Gist & Cookbook ...

小目标:每天能够提交一行代码 ...

git使用Socks5代理的合理配置

吴亮's Avatar 2019-11-23

  1. 1. 背景
    1. 1.1. 需求
  2. 2. 设置
    1. 2.1. ssh://协议
      1. 2.1.1. 安装connect
      2. 2.1.2. ssh配置
    2. 2.2. https://协议
  3. 3. 参考

背景

国内从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文件,配置如下:

1
2
3
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文件的权限:

1
chmod 755 $HOME/.ssh/config

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

https://协议

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

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

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

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

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

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

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

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

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

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

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

参考

本文作者 : 吴亮
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://www.wuliang.me/git-proxy/

本文最后更新于 天前,文中所描述的信息可能已发生改变