git 设置 http 代理必须用完整 url 格式,如 git config --global http.proxy http://127.0.0.1:8080;https 代理须用 https:// 前缀;含特殊字符的账号密码需 url 编码;本地仓库配置应省略 --global;验证需用 curl -x 或 git ls-remote 实测。

Git 设置 HTTP 代理最直接有效的方式是用 git config --global 命令写入配置,但必须注意协议前缀、端口格式和认证信息的拼接方式——错一个字符(比如漏了 http:// 或多加了 s)就会导致 git clone 失败且报错不明确。
HTTP 代理配置命令必须带完整协议前缀
很多人复制网上示例时直接写 git config --global http.proxy 127.0.0.1:8080,结果 git 不认——因为 Git 要求 http.proxy 的值必须是完整 URL 格式,不能只写地址+端口。
- ✅ 正确写法:
git config --global http.proxy http://127.0.0.1:8080 - ❌ 错误写法:
git config --global http.proxy 127.0.0.1:8080(缺少http://) - ❌ 错误写法:
git config --global http.proxy https://127.0.0.1:8080(HTTP 代理不能用https://前缀)
HTTPS 代理同理,必须用 https:// 前缀:git config --global https.proxy https://127.0.0.1:8080。混用会导致连接被拒绝或超时。
含用户名密码的代理要 URL 编码特殊字符
如果代理账号密码里有 @、/、: 等符号(比如密码是 pass@123),直接拼进命令会破坏 URL 结构,Git 解析失败。
- 必须对用户名和密码分别做 URL 编码:例如
user@name→user%40name,pass/123→pass%2F123 - 完整命令示例:
git config --global http.proxy http://user%40name:pass%2F123@127.0.0.1:8080 - 可用 Python 快速编码:
python3 -c "import urllib.parse; print(urllib.parse.quote('your_password'))"
只对当前仓库设代理,别动全局配置
在公司内网或混合网络环境里,全局代理可能干扰内部 GitLab 或私有仓库访问。这时应避免 --global,改用本地仓库级配置。
- 进入项目根目录后执行:
git config http.proxy http://127.0.0.1:8080(无--global) - 该设置只写入项目下的
.git/config,不影响其他仓库 - 检查是否生效:
git config --get http.proxy(不加--global) - 若后续要删,用:
git config --unset http.proxy
验证代理是否真起作用,别只看 config 输出
git config --get http.proxy 显示有值,不代表代理能通——常见问题是代理服务没开、端口被防火墙拦、或代理本身不支持 HTTPS 隧道(导致 https.proxy 配置无效)。
- 最简验证命令:
curl -x http://127.0.0.1:8080 https://github.com(用curl模拟 Git 行为) - Git 实际测试:
git ls-remote https://github.com/microsoft/vscode.git HEAD(比clone轻量,不下载代码) - 若报错
unable to access 'https://...': Failed to connect,大概率是代理地址/端口不通;若报SSL certificate problem,需加git config --global http.sslVerify false(仅限可信内网)
代理配置容易一试就忘,真正卡住的往往不是命令怎么写,而是代理进程是否运行、端口是否监听、以及 HTTPS 代理是否要求隧道支持——这些得用 netstat -tuln | grep 8080 和 curl -v 看真实连接过程。











