Git不同代理的区别以及应该如何配置


HTTP代理和SOCKS5代理的区别

协议本质区别

  • HTTP 代理:基于 HTTP 协议工作,最初设计用于转发 Web 流量,对 HTTP/HTTPS 协议的兼容性较好,但处理其他协议时可能存在局限。
  • SOCKS5 代理:是更底层的代理协议,不依赖具体应用层协议,能转发几乎所有类型的网络流量(包括 HTTP、HTTPS、FTP 等),通用性更强。

在 Git 场景中,两者都能实现代码拉取 / 推送的代理功能,但 SOCKS5 通常表现更稳定,尤其是在处理复杂网络请求时。

不建议同时配置

在 Git 的配置文件中,如果对同一协议(如 [http][https])同时设置多个 proxy 项,Git 只会生效最后一个配置,前面的配置会被覆盖。

[http]
proxy = socks5://127.0.0.1:10808  # 这行会被下一行覆盖
proxy = http://127.0.0.1:10809    # 实际生效的配置

这种情况下,同时配置不仅没有意义,还可能因配置冲突导致代理无法正常工作。

Git仓库拉取时的HTTP、HTTPS和SSH的区别

协议本质与连接方式

  • SSH(Secure Shell)
    基于 SSH 协议的加密网络传输,通过密钥对进行身份验证,无需每次输入密码。连接格式通常为:
    git@github.com:用户名/仓库名.git
  • HTTP/HTTPS
    基于超文本传输协议(HTTP),HTTPS 是 HTTP 的加密版本(通过 SSL/TLS 加密)。连接格式通常为:
    • HTTP:http://github.com/用户名/仓库名.git不推荐,明文传输,安全性低
    • HTTPS:https://github.com/用户名/仓库名.git(主流推荐,加密传输)
维度 SSH HTTPS HTTP
认证方式 依赖 SSH 密钥对(公钥存 GitHub,私钥存本地) 依赖用户名 + 密码,或 Personal Access Token(PAT) 同 HTTPS,但无加密,已被 GitHub 逐步淘汰
安全性 高(全程加密,密钥不易泄露) 高(传输加密) 低(明文传输,已不推荐)
使用复杂度 首次配置稍复杂(需生成 / 上传密钥) 简单(直接输入账号密码或 PAT) 简单,但安全性差
权限管理 基于密钥授权,可精细控制(如部署密钥) 基于账号权限,适合普通用户 同 HTTPS,但不安全
适用场景 频繁操作(如开发机)、自动化脚本 偶尔操作、临时克隆、对安全性有要求 几乎不适用,仅历史兼容

Git配置代理

SSH代理

  1. C:\Users\UserName\.ssh路径下面创建文件config文件。
  2. 复制下面的内容。
# 必须是 github.com
Host github.com
   HostName github.com
   User git
   # 走 HTTP 代理
   # ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=10808
   # 走 socks5 代理(如小飞机 or V2xxx)
   # ProxyCommand nc -v -x 127.0.0.1:10808 %h %p
   # 对于 Windows 用户,要使用 socks5 代理却没有 nc 的用这个
   ProxyCommand connect -S 127.0.0.1:10808 %h %p
  • -Ssocks, -HHTTP

  • %h:表示目标主机名(HostName),在你的配置中就是 github.com

  • %p:表示目标端口号,SSH 协议默认端口是 22(可省略,默认就是 22)

如果上面的不生效可以在试试下面的

# 对 GitHub 的 SSH 连接启用代理
Host github.com
  HostName ssh.github.com
  Port 443
  User git
  # 若使用 SOCKS5 代理(如 v2rayN 的 10808 端口)
  ProxyCommand connect -S 127.0.0.1:10808 %h %p

GitHub 除了默认的 SSH 端口 22,还支持通过 443 端口 进行 SSH 连接(域名是 ssh.github.com)。

这种配置的优势是:很多网络环境会封锁 22 端口,但通常会开放 443 端口(HTTPS 常用端口),因此用 443 端口更容易绕过网络限制。

注意事项:

  1. 必须同时指定 HostName ssh.github.comPort 443,否则 443 端口不会生效
  2. 这种方式本质还是 SSH 协议,只是改用了 443 端口,代理配置逻辑和之前一致
  3. 测试是否生效的命令依然是:ssh -vT git@github.com

HTTP、HTTPS代理

临时设置

打开 Git Bash,使用命令临时设定socks代理:

git config --global http.proxy 'socks5://127.0.0.1:socks5端口号'
git config --global https.proxy 'socks5://127.0.0.1:socks5端口号'

或者http代理:

git config --global http.proxy 'http://127.0.0.1:http端口号'
git config --global https.proxy 'https://127.0.0.1:https端口号'

永久设置

若想要设置代理永久生效,则可以把它写入 .gitconfig 文件中。

[http]
proxy = socks5://127.0.0.1:socks5端口号
proxy = http://127.0.0.1:http端口号
 
[https]
proxy = socks5://127.0.0.1:socks5端口号
proxy = https://127.0.0.1:http端口号

参考

git设置代理

配置 github ssh 加速

GIT Proxy 一键设置代理 让你的 git clone Github 再也不像百度云一样内行


文章作者: 草莓多多
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 草莓多多 !
  目录