为git设置代理

有时候在内网工作,工作机不能连接到外网,要 push 只能通过内网提供的代理时,那么就必需要设置 git 的代理了。

Git 目前支持的三种协议 git://ssh:// 以及 http(s)://,其代理配置各不相同:core.gitproxy 用于git:// 协议,http.proxy 用于 http(s):// 协议,而ssh:// 协议的代理需要配置 ssh 的 ProxyCommand 参数。

所以我们要针对不同的 Git 协议来进行代理的设置,而且还需要根据代理服务器的不同来进行不同的设置。

一、代理服务器为 socks4/5

使用 socks 代理服务器的时候,我们需要用 https://bitbucket.org/gotoh/connect 来进行代理的转换,可以下载下来自己编译,也可以 Linux 发行版的仓库中查找命名为 proxy-connect 或者 connect-proxy 的软件包,Archlinux 可以在 aur 中找到 connect-proxy。

建立一个 /PATH/TO/socks5proxywrapper 文件,内容为,假设服务器地址为 10.22.0.4,端口为 1080:

#!/bin/sh
connect -S 10.22.0.4:1080 "$@"

 
  
 
  

1.GIT 协议的配置

配置 ~/.gitconfig

[core]gitproxy = /PATH/TO/socks5proxywrapper

或者直接设置 GIT_PROXY_COMMAND 环境变量

export GIT_PROXY_COMMAND=”/PATH/TO/socks5proxywrapper”

2.SSH 协议的配置

建立一个 /PATH/TO/socks5proxyssh 文件:

#!/bin/sh
ssh -o ProxyCommand="/PATH/TO/socks5proxywrapper %h %p" "$@"

 
  

配置 git 使用该 wrapper

export GIT_SSH=”/PATH/TO/socks5proxyssh”

或者

GIT_SSH=”/PATH/TO/socks5proxyssh” git pull/push

当然也可以直接配置 ~/.ssh/config 的 ProxyCommand

3.HTTP(S) 协议的配置

因为 Git 使用 libcurl 提供 http 支持,所以直接在 git 配置文件中加入

[http]proxy = socks5://127.0.0.1:7070

二、代理服务器为 http 代理

1.HTTP 协议配置

[http]proxy = http://10.22.0.4:8080

2.SSH/GIT 协议

建立 /PATH/TO/httpproxywrapper 文件:

#!/bin/sh
connect -H 10.22.0.4:8080 "$@"

然后根据上述 socks 代理中的设置,将 socks5proxywrapper 改为 httpproxywrapper


Linux情况下:

经常有使用SCM下载源码的必要,尤其是软件开发人员。但偶们的网络环境经常逼得我们不得不使用代理,或者是因为速度,或者是因为直连根本就不通。而且源码通常是零零碎碎的几千几万个小文件,不像一般的软件是单个的文件,一个下载工具即可搞定。

1,CVS
CVS使用代理非常麻烦,似乎不能用http代理(如果偶错了请提醒),而socks代理相当难找。好在这个东东已经慢慢变成了昨日黄花,我们不讨论它。

2,SVN
SVN比较方便,编辑~/.subversion/servers文件即可:
[global]
http-proxy-host = <代理的ip或域名>
http-proxy-port = <代理端口>
http-proxy-username = <用户名,如果需要的话>
http-proxy-password = <密码,如果需要的话>

3,HG
HG更简单,因为它使用的是http协议,一个命令解决:
export http_proxy=http://<用户名>:<密码>@:<端口>

4,Git
Git可以使用两种协议,git协议和http,如果是后者,那么办法跟HG一样,如果是git,比较麻烦,但也不是不可解决:
先去下载一个协议转换小工具
编译之:gcc -o connect connect.c
将生成的connect放到可执行文件路径中,如/usr/bin

然后创建一个使用代理的脚本,假设是http-proxy-gw,注意加上可执行属性,内容如下:
#!/bin/sh
# Filename: ~/bin/http-proxy-gw
# This script connects to an HTTP proxy using connect.c
connect -H http://yourproxyaddress:proxyport $@

最后,配置git:
git config --global core.gitproxy "http-proxy-gw for xxx.yyy"
后面的xxx.yyy是域名后缀,比如,下载linux源码就可以是设置为kernel.org

PS:

git config --global http.proxy http://proxy.com:1234
git config --global https.proxy http://proxy.com:1234
git config --global http.sslverify false

你可能感兴趣的:(Java,Code,Linux,Windows,git,代理服务器)