Windows/Linux/macOS 下 Git 设置代理的正确方式(针对 GitHub)

自从 GitHub 对个人提供无限制的私有 repo 之后,作者陆续把之前所有 side project 的 repo 从自建的 Gogs 都迁移到 GitHub 上。日常使用最大的问题就是 clone/push/pull 操作缓慢,我们可以通过设置代理来解决。

Git 支持 ssh,http,https 三种协议,这三种协议设置代理的方式并不一致,同时不同系统环境的配置方式也有区别。

设置 ssh 代理

在 ~/.ssh/config 文件针对 github.com 配置以下代码:

Windows

ProxyCommand connect -S 127.0.0.1:8889 %h %p

命令中的 -S 参数,表示使用 socks5 协议的代理服务器。

例如作者的配置如下:

Host github.com *.github.com
    ProxyCommand connect -S 127.0.0.1:8889 %h %p
    IdentityFile ~/Dropbox/config-files/identity/id_rsa

Linux/macOS

ProxyCommand nc -v -x 127.0.0.1:8889 %h %p

支持使用 socks5:// 协议的代理服务器。

例如作者的配置如下:

Host github.com *.github.com
    ProxyCommand nc -X 5 -x 127.0.0.1:8889 %h %p
    IdentityFile ~/Dropbox/config-files/identity/id_rsa

设置 http/https 代理

直接使用以下命令

git config --global http.https://github.com.proxy socks5h://127.0.0.1:8889

可以将上面的命令中的 socks5h:// 改成 socks5://,两者的区别如下:

  • socks5h://,会由代理服务器去解析主机域名;
  • socks5://,直接由本地发起去解析主机域名;

哪个合适要看代理服务器的情况,举个例子,作者的代理服务器在美国,使用 socks5h:// 由代理服务器解析主机域名明显更快,因为不需要绕道,代理服务器会直接访问 github.com 在美国的 CDN 服务器 IP;假如用 socks5://,会导致本地解析 github.com 获取到 Github 在亚洲的 CDN 服务器 IP,变成本机访问在美国的代理服务器,而代理服务器又要回到亚洲去访问 github.com 的 CDN 服务器。

本文链接:https://blog.wardchan.com/posts/set-proxy-for-git-client.html参与评论 »

--EOF--

Comments