Git网络问题解决

访问 github,但是在发现“git clone”命令速度特别慢,有时还经常卡掉。本文通过设置 git 代理,解决网络问题。

# 前置要求

  • 首先有一个可用的代理
  • 确认代理端口号

在代理软件查看 Socks5 端口号和 Http 端口号。

git 有几种传输协议,Github 上主要用到的是 Https 和 SSH 协议。所以我们要做的是对 git 命令的 https 以及 ssh 流量做代理。

# 设置 HTTPS 代理

Git 代理有两种设置方式,分别是全局代理和只对 Github 代理,建议只对 github 代理。 代理协议也有两种,分别是使用 http 代理和使用 socks5 代理,建议使用 socks5 代理。 注意下面代码的端口号需要根据你自己的代理端口设定,比如我的代理 socks 端口是 51837。

全局设置(不推荐)

#使用http代理 
git config --global http.proxy http://127.0.0.1:9999
git config --global https.proxy https://127.0.0.1:9999
#使用socks5代理
git config --global http.proxy socks5://127.0.0.1:10000
git config --global https.proxy socks5://127.0.0.1:10000

只对 Github 代理(推荐)

#使用socks5代理(推荐)
git config --global http.https://github.com.proxy socks5://127.0.0.1:10000
#使用http代理(不推荐)
git config --global http.https://github.com.proxy http://127.0.0.1:9999

取消代理 当你不需要使用代理时,可以取消之前设置的代理。

git config --global --unset http.proxy git config --global --unset https.proxy

# 设置 SSH 代理

https 代理存在一个局限,那就是没有办法做身份验证,每次拉取私库或者推送代码时,都需要输入 github 的账号和密码,非常痛苦。 设置 ssh 代理前,请确保你已经设置 ssh key。可以参考 在 github 上添加 SSH key 完成设置 更进一步是设置 ssh 代理。只需要配置一个 config 就可以了。

# Linux、MacOS
vi ~/.ssh/config
# Windows 
到C:\Users\your_user_name\.ssh目录下,新建一个config文件(无后缀名)

将下面内容加到 config 文件中即可

对于 windows 用户,代理会用到 connect.exe,你如果安装了 Git 都会自带 connect.exe,如我的路径为 C:\APP\Git\mingw64\bin\connect

#Windows用户,注意替换你的端口号和connect.exe的路径

ProxyCommand "C:\APP\Git\mingw64\bin\connect" -S 127.0.0.1:51837 -a none %h %p

#MacOS用户用下方这条命令,注意替换你的端口号
#ProxyCommand nc -v -x 127.0.0.1:51837 %h %p

Host github.com
  User git
  Port 22
  Hostname github.com
  # 注意修改路径为你的路径
  IdentityFile "C:\Users\Your_User_Name\.ssh\id_rsa"
  TCPKeepAlive yes

Host ssh.github.com
  User git
  Port 443
  Hostname ssh.github.com
  # 注意修改路径为你的路径
  IdentityFile "C:\Users\Your_User_Name\.ssh\id_rsa"
  TCPKeepAlive yes

保存后文件后测试方法如下,返回 successful 之类的就成功了。

# 测试是否设置成功
ssh -T git@github.com

之后都推荐走 ssh 拉取代码,再 github 上选择 clone 地址时,选择 ssh 地址,入下图。这样 git pushgit clone 都可以直接走代理了,并且不需要输入密码。

# 原理

代理服务器就是你的电脑和互联网的中介。当您访问外网时(如 http://google.com) , 你的请求首先转发到代理服务器,然后代理服务器替你访问外网,并将结果原封不动的给你的电脑,这样你的电脑就可以看到外网的内容啦。 路径如下:

你的电脑 ->代理服务器 ->外网

外网 ->代理服务器 ->你的电脑

配置代理之后,可以正常访问 github 了,但是发现在本地克隆 github 仓库(git clone xxx)时还是报网络错误。那是因为 git clone 没有走你的代理,所以需要设置 git 代理才行。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计