为 Git 设置代理

摆脱龟速 git clone

最近开始刷 MIT 6.S081,git clone实在是龟速,上网查了为各个协议设置代理的方法,在此记录。

前提

请确认本地已经打开代理,切换到「全局模式」。找到监听的端口,比如我使用的客户端是 ClashX,可以点击Copy shell command来确认端口:

# 得到的结果
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891
# 得到的结果
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891

最简单的解决方案

使用 proxychains(现在新版本是叫proxychains-ng)一站式解决所有协议的配置。

$ brew install proxychains-ng
$ proxychains4 git clone xxx
$ brew install proxychains-ng
$ proxychains4 git clone xxx

http://

为防止 clone 国内仓库速度慢,我们只为 GitHub 设置代理:

$ git config --global http.http://github.com.proxy https://127.0.0.1:7890
$ git config --global http.https://github.com.proxy https://127.0.0.1:7890
# 如果之后 clone 报错可以加上以下两行
$ git config --global http.sslverify false
$ git config --global remote.origin.proxy 127.0.0.1:7890
$ git config --global http.http://github.com.proxy https://127.0.0.1:7890
$ git config --global http.https://github.com.proxy https://127.0.0.1:7890
# 如果之后 clone 报错可以加上以下两行
$ git config --global http.sslverify false
$ git config --global remote.origin.proxy 127.0.0.1:7890

取消设置:

$ git config --global --unset http.proxy
$ git config --global --unset https.proxy
$ git config --global --unset http.proxy
$ git config --global --unset https.proxy

ssh:// (git@)

这需要修改~/.ssh/config(如果没有则新建)。将以下代码加入config文件,填入你的ipport

Host github.com
   HostName github.com
   User git
   ProxyCommand nc -v -x <your_proxy_host>:<your_proxy_host> %h %p
Host github.com
   HostName github.com
   User git
   ProxyCommand nc -v -x <your_proxy_host>:<your_proxy_host> %h %p

git://

对于 GitHub ,可以利用insteadOf 来快速实现:

git config --global url.https://github.com/.insteadOf git://github.com/
git config --global url.https://github.com/.insteadOf git://github.com/

但是,对于 MIT 给出的仓库地址,git://g.csail.mit.edu/xv6-labs-2020,这个是行不通的。所以我们需要修改core.gitProxy。先写一个git-proxy的脚本,并把它放到PATH能找到的地方,再进行修改。

$ echo "nc -x <your_proxy_host>:<your_proxy_host> $1 $2" > /usr/local/bin/git-proxy
$ git config --global --add core.gitProxy git-proxy
$ echo "nc -x <your_proxy_host>:<your_proxy_host> $1 $2" > /usr/local/bin/git-proxy
$ git config --global --add core.gitProxy git-proxy

大功告成!

参考资料

  1. proxychains 相关

  2. macos 给 git(github) 设置代理(http/ssh)

  3. git clone 一个 github 上的仓库,太慢,经常连接失败,但是 github 官网流畅访问,为什么? - 汪小九的回答 - 知乎

  4. stackoverflow

欢迎通过 Twitter 邮件告诉我你的想法
Find me on Twitter or write me an email