使用代理的动机
内网或跨境访问 Git 仓库时,常会遇到延迟高、连接失败、TLS 握手超时等问题。通过为 Git 配置代理,可以复用团队的跳板机、单机 Clash、SS/SSR、V2Ray、企业 HTTP Proxy 等网络能力,加速 git clone、git 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(依赖 nc 或 ncat 版本)。
校验代理是否生效
- 运行
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 仓库访问场景。