目录
场景教程

GitHub 访问慢、打不开怎么办?clone 与下载加速方法

GitHub 在部分地区时快时慢的原因(DNS 污染、跨境线路拥堵),改 hosts、镜像站等免费办法的利弊,git clone、Release、raw 文件的加速方法,以及 SSH 22 端口超时的解决办法。

最后更新:

GitHub 在部分地区并没有被完全封锁,但经常出现打开慢、图片加载不出来、git clone 速度只有几十 KB/s 甚至超时的情况。原因主要有两个:部分域名的 DNS 解析受到干扰,以及跨境线路拥堵。改 hosts、用镜像站等免费办法能缓解一部分问题,但最稳定的办法是让 GitHub 的流量(包括终端里的 git 命令)走一条稳定的海外线路。

为什么 GitHub 时快时慢?

现象常见原因
网页能打开,但头像、README 里的图片加载不出来图片和原始文件所在的域名(如 raw.githubusercontent.com、avatars.githubusercontent.com)解析结果被干扰,连不上
网页时好时坏,白天正常、晚上很慢跨境线路在晚高峰拥堵,丢包严重
git clone 速度很慢或中途断开大文件传输对线路质量最敏感,丢包会让 TCP 速度骤降
SSH 方式 clone 超时部分网络限制了 22 端口
Release 下载很慢安装包存放在 objects.githubusercontent.com 等独立域名上,线路同样受限

关于 DNS 和丢包为什么会影响速度,可以看 常见网络协议一览。

免费办法及其利弊

修改 hosts / 更换 DNS

把 GitHub 相关域名和可用的 IP 手动写进系统的 hosts 文件,或者把 DNS 换成公共 DNS,绕过被干扰的解析结果。

  • 优点:免费,对「图片加载不出来」这类问题见效快;
  • 缺点:GitHub 的 IP 会变化,网上流传的 hosts 列表很快过时;只能解决「解析」问题,解决不了线路慢。

镜像站和代理下载服务

网上有一些 GitHub 镜像或加速下载服务,把仓库地址替换成镜像地址后 clone 或下载。

  • 优点:对下载公开仓库、Release 文件很有效;
  • 缺点:第三方服务随时可能失效;内容可能不是最新的;不要在上面登录 GitHub 账号或使用访问令牌,推送代码、提交 PR 仍需连接 GitHub 本身。

本地代码托管平台中转

把仓库导入到本地的代码托管平台再 clone,适合偶尔下载一个大仓库。缺点是步骤多、无法同步更新,也不适合日常协作。

什么时候需要稳定的加速线路

如果你每天都要用 GitHub 写代码、提交 PR、拉依赖,上面的办法都比较折腾。这时更省心的做法是让 GitHub 的所有流量走一条稳定的海外线路。关键在于终端里的命令也要走,而不只是浏览器。

为什么浏览器快了,终端里 git 还是慢?

很多工具只设置了系统代理,浏览器会遵守,但 git、curl、npm 等命令行工具默认不读这个设置,仍然直连。有两种解决办法:

办法一:给 git 单独设置代理(适用于提供本地代理端口的工具,端口以你使用的工具为准):

# 只让 GitHub 走代理
git config --global http.https://github.com.proxy http://127.0.0.1:<端口>

# 取消设置
git config --global --unset http.https://github.com.proxy

这个设置只对 HTTPS 方式的 clone 生效,对 SSH 方式无效。

办法二:使用 TUN 模式,由虚拟网卡接管整台设备的流量,git、curl、docker 等所有命令都不需要单独设置。两种方式的区别见 系统代理、全局模式与 TUN 模式。

用穿山甲加速 GitHub

穿山甲在各平台都使用 TUN 模式,并默认开启「智能分流」:GitHub 自动走加速,本地的镜像源、公司内网照常直连。连接后不需要任何额外设置,git clone、git push、Release 下载都会走加速线路。如果晚上速度变慢,可以在节点列表里点刷新,换一个延迟更低的节点,见 连接与切换线路。

免费版额度:穿山甲免费版每天 10 分钟、500 MB,clone 大仓库或下载大文件很快就会用完;日常开发建议开通会员,详见 免费版额度。

SSH 22 端口超时怎么办?

如果 git clone [email protected]:... 或 ssh -T [email protected] 一直超时,多半是 22 端口被限制了。GitHub 官方提供了走 443 端口的 SSH 服务,编辑 ~/.ssh/config(没有就新建),加入:

Host github.com
    Hostname ssh.github.com
    Port 443
    User git

保存后测试:

ssh -T [email protected]
# 看到 "Hi 你的用户名! You've successfully authenticated" 即成功

之后仓库地址不用改,[email protected]:... 会自动走 443 端口。这个办法和加速线路可以同时使用。

加速 Release 与 raw 文件下载

要下载的内容建议
Release 安装包在加速线路下用浏览器下载;命令行用 curl -L -O <下载地址>,TUN 模式下会自动走加速
单个原始文件(raw)同上;如果只是偶尔下载,也可以用镜像服务
大仓库只要最新代码git clone --depth 1 <仓库地址>,只下载最新一次提交,体积能小很多
仓库里有大文件(LFS)先 clone 再 git lfs pull,中途失败可以重试,已下载的部分会保留

相关阅读

常见问题

SSH 方式 git clone 一直超时怎么办?

很多网络会限制 22 端口。GitHub 官方提供了走 443 端口的 SSH 服务:在 ~/.ssh/config 里把 github.com 的 Hostname 设为 ssh.github.com、Port 设为 443 即可,无需改仓库地址。

用镜像站 clone 安全吗?

只用来下载公开的代码问题不大,但要注意镜像可能不是最新的,也不要在第三方镜像上输入 GitHub 的账号密码或令牌,推送代码仍应直连 GitHub。

改 hosts 为什么过几天又不行了?

GitHub 的 IP 地址会变化,网上流传的 hosts 列表很快就会过时;而且改 hosts 只能解决域名解析被干扰的问题,解决不了跨境线路慢的问题。

开了加速,网页能打开但终端里 git 还是慢?

说明你用的工具只设置了系统代理,命令行没有走加速。可以给 git 单独设置代理,或者改用 TUN 模式接管整台设备,穿山甲默认就是 TUN 模式。

还没有安装穿山甲?

支持 iPhone / iPad、Mac、Windows 与 Android。新用户注册即送 7 天会员体验。

下载客户端
← 全部文章