出于众所周知的原因,我们经常需要通过代理来连接到github.com.
在浏览器中使用代理我们已经很熟悉了。但是在Linux命令行中,有时不是那么顺利。
git通常有两种方式链接远程仓库:ssh和http
如果在您的git仓库中查看远程仓库:
> git remote -v
origin [email protected]:example/example.git (fetch)
origin [email protected]:example/example.git (push)
而非:
https://github.com/example/example.git,那么您将通过ssh连接到github.com。
此时,若如以下方式直接在git中设置http代理,将无益于git push git pull等命令:
#git config --global http.proxy http://your_proxy_url
#git config --global --unset http.proxy
#git -c http.proxy=http://server:port push
因为git push git pull时将通过ssh连接。
当然,可以修改git remote来解决此问题。
或者,修改ssh的配置:
vim .ssh/config:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/your_private_key
ProxyCommand nc -x your_proxy_url:your_proxy_port %h %p
修改后会立刻生效。
此时将通过socks5代理连接至github.com。
或者,通过http:
ProxyCommand corkscrew your_proxy_url your_proxy_port %h %p
注意,在ProxyCommand nc -x your_proxy_url:your_proxy_port %h %p命令中,使用了netcat的nc命令。请根据您的发行版自行安装netcat。
在ArcLinux中,有extra/gnu-netcat和extra/openbsd-netcat,请使用后者。