使用代理的动机

内网或跨境访问 Git 仓库时,常会遇到延迟高、连接失败、TLS 握手超时等问题。通过为 Git 配置代理,可以复用团队的跳板机、单机 Clash、SS/SSR、V2Ray、企业 HTTP Proxy 等网络能力,加速 git clonegit fetch 等操作。

快速启用 HTTP/HTTPS 代理

最常见的做法是直接写入 Git 配置:

# 全局配置(~/.gitconfig)
git config --global http.proxy  http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

如果是单个仓库,去掉 --global,在项目根目录执行即可:

# 仅对当前仓库生效
git config http.proxy  http://127.0.0.1:7890
git config https.proxy http://127.0.0.1:7890

可借助 git config --global -l | grep proxy 快速确认配置。

配置 SOCKS 代理

与 HTTP/HTTPS 配置类似,只是需要显式声明 socks5

# Clash / V2Ray 等提供 SOCKS 端口时
port=7891
git config --global http.proxy  socks5://127.0.0.1:$port
git config --global https.proxy socks5://127.0.0.1:$port

部分代理工具会同时提供 HTTP 和 SOCKS 端口,可根据需要选择。

临时使用代理

如果只希望在某次命令中启用代理,可使用环境变量临时覆盖:

HTTPS_PROXY=http://127.0.0.1:7890 \
HTTP_PROXY=http://127.0.0.1:7890 \
GIT_SSH_COMMAND="ssh -o ProxyCommand='nc -x 127.0.0.1:7890 %h %p'" \
git clone https://github.com/org/repo.git

命令结束后,环境变量不会写入配置文件,适合一次性操作或脚本场景。

SSH 场景的代理

当仓库通过 SSH 访问(如 [email protected]:org/repo.git)时,可以借助 ~/.ssh/config 设置:

Host github.com
  HostName github.com
  User git
  ProxyCommand nc -x 127.0.0.1:7890 %h %p

如果使用 SOCKS 代理,把 -x 换成 --proxy-type socks5(依赖 ncncat 版本)。

校验代理是否生效

  • 运行 GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ls-remote https://github.com/org/repo.git,检查日志中是否出现代理地址。
  • 在代理日志(如 Clash Dashboard)查看是否有 Git 的请求流量。
  • 观察 git fetch 的耗时是否下降。

常见排查 checklist

  • 代理服务是否启动且监听正确端口?
  • 系统级 PAC/全局代理是否与 Git 手动配置冲突?
  • 对于公司代理,是否需要填写用户名密码?可使用 http://user:pass@proxy:port 形式。
  • 某些内网地址不应走代理,可通过 git config --global http.<domain>.proxy "" 单独关闭。

管理与清理

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

若在配置文件里存在多处代理设置,可直接编辑 ~/.gitconfig 手动清理,或使用 git config --global --unset-all http.proxy

小结

  • 开发机使用 Clash/V2Ray 时,首选 SOCKS 代理,可避免某些 HTTP 认证问题。
  • 企业场景统一走 HTTP Proxy,建议集中在 ~/.gitconfig 配置并同步给团队成员。
  • 脚本或 CI 中临时使用代理时,利用环境变量控制生命周期,脚本结束自动恢复。
  • 搭配 ssh config 能覆盖 SSH 仓库访问场景。