通过代理进行Git推送

出于众所周知的原因,我们经常需要通过代理来连接到github.com.

在浏览器中使用代理我们已经很熟悉了。但是在Linux命令行中,有时不是那么顺利。

git通常有两种方式链接远程仓库:sshhttp

如果在您的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命令中,使用了netcatnc命令。请根据您的发行版自行安装netcat。 在ArcLinux中,有extra/gnu-netcatextra/openbsd-netcat,请使用后者。