这几天 git clone Github 是真的爆炸啊,永远都是 10kb/s 左右,也不是私有仓库啊?百度云都要直呼内行了。

由于我用的是 ssh 方式拉取代码的,于是乎终端 http proxy 也只能起到玄学(心理自我安慰)作用了。

到底如何设置 ssh 协议的 proxy 呢?

分辨需要设置的代理

一、HTTP 形式

走 HTTP 代理

git config --global http.proxy "http://127.0.0.1:8080"

git config --global https.proxy "http://127.0.0.1:8080"

走 socks5 代理(如 小飞机 or V2xxxx)

git config --global http.proxy "socks5://127.0.0.1:1080"

git config --global https.proxy "socks5://127.0.0.1:1080"

取消设置

git config --global --unset http.proxy

git config --global --unset https.proxy

二、SSH 形式

修改 ~/.ssh/config 文件(不存在则新建):

# 必须是 github.com
Host github.com
   HostName github.com
   User git
   # 走 HTTP 代理
   # ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=8080
   # 走 socks5 代理(如小飞机 or V2xxx)
   # ProxyCommand nc -v -x 127.0.0.1:1080 %h %p

对于 Windows 用户,要使用 socks5 代理却没有 nc 的,可以将

ProxyCommand nc -v -x 127.0.0.1:1080 %h %p
换成
ProxyCommand connect -S 127.0.0.1:1080 %h %p

配合上面的修改,我这里分享一个我的自用 Linux 一键切换脚本,将下面代码写入 ~/.bash_profile(其他 bash 程序或电脑系统可能路径不太一样)

function github_on() {
    cat "${HOME}/.ssh/config" >"${HOME}/.ssh/config_back" # 先备份
    config=$(cat ${HOME}/.ssh/config_back | sed 's/\# ProxyCommand/ProxyCommand/g')
    echo -e "${config}" >"${HOME}/.ssh/config" && echo -e "\033[36mGithub 已上代理!\033[0m"
}

function github_off() {
    cat "${HOME}/.ssh/config" >"${HOME}/.ssh/config_back" # 先备份
    config=$(cat ${HOME}/.ssh/config_back | sed 's/    ProxyCommand/    \# ProxyCommand/g')
    echo -e "${config}" >"${HOME}/.ssh/config" && echo -e "\033[33mGithub 停止代理!\033[0m"
}

写完之后运行  source ~/.bash_profile 使配置文件生效,使用下面的指令就可以很爽的用啦

github_on
# 启动

github_off
# 关闭