GitHub clone 慢,多数是因为 git 不读取系统代理,仍在直连。最直接的解决方法是给 git 单独设置代理,例如 git config --global http.proxy http://127.0.0.1:7890,端口以你客户端设置中的代理端口为准;使用 SSH 地址的仓库需要在 SSH 配置中单独设置,或者直接开启客户端的 TUN 模式。
目录
GitHub 在国内能直连,但速度和稳定性波动很大,clone 大仓库经常只有几十 KB/s 或中途断开。很多人开了代理客户端,浏览器访问 GitHub 很快,git clone 却依旧很慢,原因是 git 这类命令行程序通常不读取系统代理设置,仍在直连。
解决思路有三种:给 git 单独配置代理、让 SSH 走代理,或者开启客户端的 TUN 模式一次解决所有命令行工具。
给 git 单独配置 HTTP 代理
适用于用 https://github.com/... 地址 clone 的仓库:
# 所有 HTTPS 仓库走代理
git config --global http.proxy http://127.0.0.1:7890
# 或者只让 GitHub 走代理(推荐)
git config --global http.https://github.com.proxy http://127.0.0.1:7890
# 查看与取消
git config --global --get http.proxy
git config --global --unset http.proxy
示例中的 7890 只是常见端口。请在代理客户端的设置里查看实际的 HTTP 或混合代理端口,不同客户端和版本的默认值不同。端口不对时,git 会提示连接被拒绝。
仓库很大、只需要最新代码时,可以用浅克隆减少下载量,中途断开的概率也会降低:
git clone --depth 1 https://github.com/用户名/仓库名.git
让 SSH 地址走代理
如果仓库地址是 [email protected]:... 格式,走的是 SSH 协议,上面的 http.proxy 不起作用。通用思路是在 SSH 配置文件中为 github.com 指定代理命令。macOS 和 Linux 上常见写法如下:
# 写入 ~/.ssh/config
Host github.com
HostName ssh.github.com
Port 443
User git
ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p
这里做了两件事:通过 GitHub 提供的 443 端口 SSH 服务连接,减少 22 端口被干扰的影响;再通过 SOCKS5 代理转发,端口需支持 SOCKS5(Clash 系客户端的混合端口通常同时支持 HTTP 与 SOCKS5)。Windows 的 Git Bash 环境中 nc 的参数可能不同,常见做法是改用 Git for Windows 自带的 connect 命令,或者直接使用下面的 TUN 模式。
开启 TUN 模式
如果你经常使用 git、npm、pip、Claude Code、Codex 等多个命令行工具,逐个配置代理比较麻烦。开启客户端的 TUN 模式后,这些工具的流量会被虚拟网卡统一接管,无需单独设置,方法见 Clash Verge Rev TUN 模式教程。两种方式的区别见系统代理和 TUN 模式有什么区别。
开启 TUN 后,建议取消之前设置的 git 代理,避免重复代理导致问题。
Release 下载慢
- 在浏览器中下载:浏览器通常会读取系统代理,开启代理后直接下载即可。
- 在命令行中下载:curl 可用
-x参数指定代理,或设置 HTTPS_PROXY 环境变量。 - 下载中断:换延迟低、丢包少的节点,按本站资料 GitHub 适合日本、新加坡、香港、美国节点。
如果出现证书或 TLS 握手错误,参考 TLS 错误排查。GitHub 与 Copilot 的更多网络问题见 GitHub 专题。
总结
- git 通常不读取系统代理,clone 慢多半是命令行仍在直连。
- HTTPS 仓库用 git config 设置 http.proxy,推荐只对 GitHub 生效,端口以客户端设置为准。
- SSH 仓库需在 SSH 配置中设置代理,或改用 443 端口连接。
- 命令行工具多时,直接开启 TUN 模式最省事。
常见问题
设置了 git 代理后,访问国内 Git 仓库会变慢吗?
如果用全局 http.proxy,所有 HTTPS 仓库都会经过代理,国内仓库会绕一圈。只给 GitHub 设置代理可以避免这个问题,命令是 git config --global http.https://github.com.proxy 加代理地址。
设置代理后提示连接被拒绝怎么办?
通常是端口不对或客户端没有运行。确认代理客户端已启动,并在客户端设置中核对代理端口,再修改 git 配置中的端口。不同客户端和版本的默认端口不同,不要照抄示例。
GitHub 用哪个地区的节点比较快?
GitHub 对节点地区不敏感,按本站 AI 工具资料,日本、新加坡、香港、美国节点都适合,优先选择延迟低、丢包少的节点。Copilot 同样对连接稳定性要求高。
取消 git 代理的命令是什么?
执行 git config --global --unset http.proxy 即可;如果设置的是只针对 GitHub 的代理,则执行 git config --global --unset http.https://github.com.proxy。