有时,git需要通过代理才可以访问到目标服务器,例如github访问速度比较慢,或者工作网络不允许直接访问外网等等,因此这一篇记录一下git代理设置。

 

传输协议

首先明确一下git clone仓库时常用的几种连接协议,大致以下三种:

  • https(http),例如:git clone https://github.com/yumefx/test.git
  • ssh,例如:git clone ssh://github.com/yumefx/test.git
  • git,例如:git clone git://github.com/yumefx/test.git

其中第一种方式可以改成git clone http://github.com/yumefx/test.git,由于自带ssl加密的https协议相比明文传输的http更安全,因此现在主流的git服务器都设置了http跳转,即使用http连接,会自动跳转到https进行实际clone操作。

在命令行看到的效果是:

git clone  http://github.com/yumefx/test.git 
// Cloning into 'test' ...
// warning: redirecting to  https://github.com/yumefx/test.git/
// remote:Enumerating objects:2,done
// ...

虽然http会自动跳转到https,但是在git客户端看来依然是不同的两个协议,因此设置代理时需要分别设置。

下面是具体设置方式。

 

https(http)代理设置

http代理

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

设置完后,在 ~/.gitconfig 这个文件中会找到对应配置

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

不使用命令的话,直接创建或修改这个文件也可以。

 
取消代理
git config --global --unset http.proxy

 

HTTPS设置

跟HTTP代理是一样的,只不过config对于的key是https.proxy。

#设置https代理
git config --global https.proxy http://127.0.0.1:8080
#取消https代理
git config --global --unset https.proxy

当然,如果用socks协议,只需要把http://或者https://替换为socks5://即可

git config --global https.proxy socks5://127.0.0.1:8080

 

ssh协议代理

linux中,在~/.ssh/config文件中配置如下,如果没有安装nc的话,需要用yum(apt-get)安装好才能使用。

Host github.com
         HostName github.com
         User git
         Port 22
         ProxyCommand nc --proxy 127.0.0.1:8080 %h %p
         IdentityFile ~/.ssh/id_rsa

windows平台的配置文件为C:\Users\administrator\.ssh\config,配置如下:

Host github.com
         User git
         Port 22
         ProxyCommand "C:/Program Files/Git/mingw64/bin/connect" -H 127.0.0.1:8080 %h %p
         IdentityFile "C:\Users\user.ssh\id_rsa"
         TCPKeepAlive yes
         IdentitiesOnly yes

两个路径根据自己的git安装目录和私钥位置自行修改。

 

ssh远程登录代理

同理,使用ssh登录远程linux服务器时,同样也可以使用。

ssh -o ProxyCommand='nc --proxy 127.0.0.1:8080 %h %p' yumefx@192.168.1.15 -p 22

或者也保存到配置文件中,然后就可以直接ssh yumefx.com登录。

Host yumefx.com 
        HostName 192.168.1.15 
        User yumefx
        Port 22 
        ProxyCommand nc --proxy 127.0.0.1:8080 %h %p 

 

git协议代理

跟https的代理设置方式相似,config的key为core.gitproxy。

#设置git协议代理
git config --global  core.gitproxy  http://127.0.0.1:8080
#取消git协议代理
git config --global --unset  core.gitproxy  

世界上只有一种英雄主义,

就是看清生活的真相之后依然热爱生活。

——《米开朗基罗》