在Windows中设置Git代理,解决操作git pushgit clone时出现连接Github失败的问题

Git协议

Git支持多种协议,包括http、ssh、git等,这里只介绍使用http和ssh这两种方式设置代理,这两种协议是独立的,如果只设置了其中一种的代理,那么另一种是不会走代理的,具体设置哪种,根据个人需要:

  1. 通过http的方式类似下面这样

    git clone https://github.com/xxx/xxx.git
    
  2. 通过ssh的方式类似下面这样

    git clone git@github.com:xxx/xxx.git
    

查看远程仓库地址

git remote -v

修改远程仓库url

git remote set-url origin <url>

设置Git http代理

注意:设置代理前,需要有一个代理服务器,我这里使用本地搭建的socks代理,地址为socks5://127.0.0.1:1080,如果你是http代理,改为http://127.0.0.1:1080即可

给所有网站设置http代理

设置git使用http代理

git config --global http.proxy socks5://127.0.0.1:1080

设置成功后,会在C:/Users/username/.gitconfig文件中添加以下内容

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

查看配置文件是否配置成功:

git config --global -e

如果希望主机名也由代理解析(这意味着通过代理传递所有内容),尤其是在克隆gist时,可以使用以下设置(关键是它使用socks5h而不是socks5)

git config --global http.proxy socks5h://127.0.0.1:1080

删除http代理:

  • 使用以下命令取消设置的代理

    git config --global --unset http.proxy
    
  • 也可以手动删除C:/Users/username/.gitconfig文件中对应的内容

    [http]
      proxy = socks5://127.0.0.1:1080
    
  • 查看是否删除成功

    git config --global -e
    

注意:

  • 代理地址socks5://127.0.0.1:1080不要加引号
  • 不需要配置https.proxy,配置了也没用,只需要设置http.proxy,对httphttps都起作用

给某个网站设置http代理

如果只想设置某个网站走代理,以github.com为例,可使用以下命令

git config --global http.https://github.com.proxy socks5h://127.0.0.1:1080

设置成功后,会在C:/Users/username/.gitconfig文件中添加以下内容

[http "https://github.com"]
    proxy = socks5h://127.0.0.1:1080

查看是否配置成功:

git config --global -e

删除代理:

git config --global --unset http.https://github.com.proxy

查看是否删除成功:

git config --global -e

设置Git SSH代理

C:\Users\username\.ssh\config文件中添加相关配置,如果没有config文件需要手动创建,connect命令是git Windows客户端git for windows自带的, 位于<Git-install-path>\mingw64\bin\connect.exe

  • socks代理添加以下配置

    Host github.com(改成你的站点)
    ProxyCommand connect -S 127.0.0.1:1080 %h %p
    
  • 如果使用http代理,则需要将-S改成-H使用以下配置

    Host github.com(改成你的站点)
    ProxyCommand connect -H 127.0.0.1:1080 %h %p
    

可以配置多个网站Host

Host github.com(改成你的站点)
ProxyCommand connect -H 127.0.0.1:1080 %h %p

Host bitbucket.org(改成你的站点)
ProxyCommand connect -H 127.0.0.1:1080 %h %p

如果Host设置为*,代理会对所有未配置的Host起作用。以下有三项配置,访问github使用第二项配置,访问bitbucket使用第三项配置,其它网站使用第一项配置

Host *
 ProxyCommand "C:/Program Files/Git/mingw64/bin/connect.exe" -H {proxyserver}:{port} %h %p
 IdentityFile "C:/Users/username/.ssh/id_rsa"
 TCPKeepAlive yes
 IdentitiesOnly yes

Host github.com(改成你的站点)
ProxyCommand connect -H 127.0.0.1:1080 %h %p

Host bitbucket.com(改成你的站点)
ProxyCommand connect -H 127.0.0.1:1080 %h %p

其中ProxyCommand命令中,%h引用配置文件中的host,%p引用配置的端口(这里没有配置,默认端口为22)

参考

git 设置和取消代理

Using a socks proxy with git for the http transport

如何为 Git 设置代理

Getting git to work through a proxy server (in Windows)