最近Git在国内使用时偶尔会遇到被墙的情况,今天我就遇到了,导致无法更新自己的远端Git仓库,于是使用goagent来解决,浏览器端的代理配置很简单,相关goagent的wiki页面也有很详细的解释。
现在你应该可以在Terminal下利用Python运行goagent代理了,代理地址是 127.0.0.1:8087,下面就以使用goagent为例,介绍如何为git配置代理。
Git 目前支持的三种协议 git://
、ssh://
和 http://
,其代理配置各不相同:core.gitproxy
用于git://
协议,http.proxy
用于 http://
协议,ssh://
协议的代理需要配置 ssh 的 ProxyCommand
参数。
先从最简单的HTTP和HTTPS协议配置代理开始,在Linux下,用户可以通过编辑自己的.bash_profile或.bash_rc文件来配置全局代理,或者直接修改环境变量,使用以下命令即可:
export http_proxy=https://127.0.0.1:8087
export https_proxy=https://127.0.0.1:8087
ftp_proxy变量也是可以设置的,不过对git没用。记得在更新完.bash_profile或.bash_rc文件后运行一下:
source .bash_profile
另外,你也可以利用git config来单独为git配置代理,方法如下:
git config –global https.proxy http://127.0.0.1:8087
git config –global http.proxy http://127.0.0.1:8087
~/.gitconfig 文件 :具体到你的用户。你可以通过传递–global 选项使Git 读或写这个特定的文件。
这里运行之后可以在用户目录的.gitconfig文件中看到修改效果,在那里也可以去除这些配置。
以上方法可以解决使用HTTPS协议的代理问题,对于我自己的项目,一般使用的都是HTTPS协议,在git clone项目的时候我们可以注意后面的url,看使用的是什么类型的协议。
如果是git协议,可以使用git config修改core.gitproxy,这里需要为其指定一个脚本文件,来执行代理的操作,例如我们建立git-proxy.sh文件,文件内容为:
#!/bin/sh
connect -S 127.0.0.1:7070 “$@”
如果没有connect命令的话,可以apt-get安装 proxy-connect 或者 connect-proxy 软件包即可。然后执行:
export GIT_PROXY_COMMAND=”/path/to/git-proxy.sh“
或者
git config –global core.gitproxy “/path/to/git-proxy.sh”
最后是针对SSH协议的配置,建立git-proxy-ssh.sh文件,写入:
#!/bin/sh
ssh -o ProxyCommand=”/path/to/git-proxy.sh %h %p” “$@”
然后配置git使用该文件:
export GIT_SSH=”/path/to/git-proxy-ssh.sh“
当然也可以直接配置 ~/.ssh/config 的 ProxyCommand,例如
Host github.com
ProxyCommand nc -X 5 -x 127.0.0.1:8087 %h %p
这样链接到 github.com 的 ssh 都会使用 127.0.0.1:8087 的代理,ssh 的配置可以参考 man ssh_config ,nc 命令的使用可以参考 man nc 。
SSH 协议的代理可以是全局的(去掉 Host 那行就行了),也可以针对某个网站,但不能针对某个仓库配置。