一、为什么 GitHub 总是打不开?
在国内访问 GitHub,几乎人人都遇到过这样的场景:
github.com主页转圈半天,最后显示”连接超时”;git clone一个仓库,下载速度只有几 KB/s,甚至直接失败;- 浏览器能开,但
raw.githubusercontent.com、codeload.github.com等资源域名经常 404 或超时。
根本原因:GitHub 的服务器在海外,国内网络环境下 DNS 解析经常被污染或指向了高延迟的节点,导致连接不稳定。
二、为什么修改 hosts 文件能解决问题?
hosts 是操作系统自带的本地域名解析文件,优先级高于 DNS 服务器。我们在里面手动指定 GitHub 各域名的 IP 地址,浏览器和 Git 客户端就会跳过 DNS 查询,直接连接到这个 IP。
当 IP 正确且网络线路可达时,GitHub 的访问速度会有质的提升——这也是为什么”改 hosts”成了最经典、最轻量的 GitHub 加速手段。
三、手动改 hosts 的三大痛点
手动改 hosts 虽然有效,但体验极差:
| 痛点 | 说明 |
|---|---|
| IP 频繁变动 | GitHub 的 CDN 节点 IP 经常调整,改完几天就失效,需要反复折腾 |
| 重复劳动 | 每次都要打开文件 → 找到旧记录 → 删除 → 粘贴新记录 → 刷新 DNS 缓存,一套操作繁琐且容易出错 |
| 跨平台麻烦 | Windows 和 Linux 的 hosts 路径、修改方式、刷新命令都不一样,每台机器都要手动维护 |
于是,我写了一套全自动的 hosts 更新脚本,解决以上全部痛点。
四、方案介绍:24 小时自动更新 hosts
脚本核心思路很简单:
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ 定时触发 │ ──▶ │ 拉取最新数据 │ ──▶ │ 更新/插入本地 │
│ (每24小时) │ │ (GitHub源) │ │ hosts 文件 │
└─────────────┘ └──────────────┘ └─────────────────┘
脚本功能一览
- 自动下载:从 GitHub 拉取最新的 hosts 数据源文件;
- 智能判断:读取数据源第二行的
#Update Time: 2026-08-12更新时间,与本地 hosts 中已有的#Update Time日期对比,如果相同说明本地已是最新版本,直接跳过,避免无意义的重复写入; - 精准替换:检查本地 hosts 是否已存在
#Github Hosts Start/#Github Hosts End标记:
- 已存在 → 只替换两个标记之间的内容,保留你自己添加的其他 hosts 条目;
- 不存在 → 换行后自动追加全部内容,不影响原有配置;
- 定时执行:通过系统自带的任务计划(Windows 计划任务 / Linux crontab)每天自动运行一次,相当于每 24 小时同步一次。
五、Windows 版使用教程(github-hosts.bat)
1. 保存脚本
将 github-hosts.bat 保存到任意目录,例如 D:\Tools\。
2. 手动执行一次
右键 bat 文件 → “以管理员身份运行”(修改 hosts 需要管理员权限)。
看到如下输出即表示成功:
[INFO] 正在从 GitHub 下载 hosts 文件...
[INFO] 远程更新时间:2026-08-12
[INFO] 本地已有更新时间:2026-08-12
[INFO] 本地 hosts 已是最新,跳过更新
3. 安装每日定时任务
以管理员身份打开 CMD,执行:
D:\Tools\github-hosts.bat install
脚本会自动通过 schtasks 创建一个名为 GitHubHostsUpdater 的计划任务,每天 10:00 以最高权限自动运行,从此无需任何手动操作。
卸载定时任务:
D:\Tools\github-hosts.bat uninstall
六、Linux 版使用教程(github-hosts.sh)
1. 保存脚本并赋予执行权限
sudo cp github-hosts.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/github-hosts.sh
2. 手动执行一次
sudo /usr/local/bin/github-hosts.sh
3. 安装每日定时任务
sudo /usr/local/bin/github-hosts.sh install
脚本会自动向 crontab 写入每日 10:00 的执行任务,日志输出到 /var/log/github-hosts.log,方便排查问题:
tail -f /var/log/github-hosts.log
卸载定时任务:
sudo /usr/local/bin/github-hosts.sh uninstall
七、修改后如何验证生效?
Windows
ipconfig /flushdns
ping github.com
Linux/macOS
sudo systemctl restart nscd # 或 sudo dscacheutil -flushcache (macOS)
ping github.com
看到 GitHub 相关域名能正常解析并 ping 通,就说明配置生效了。
八、常见问题(FAQ)
Q1:运行脚本提示”需要管理员权限”怎么办?
Windows 请右键选择”以管理员身份运行”;Linux 请在命令前加 sudo。
Q2:下载失败、提示网络错误?
数据源在 GitHub 上,需要确保本机网络可以访问 raw.githubusercontent.com。如果直连失败,建议配置代理或使用加速镜像后重试。
Q3:修改 hosts 会影响我的其他配置吗?
不会。脚本只在 #Github Hosts Start 和 #Github Hosts End 两个标记之间操作,你自己添加的其他 hosts 条目(如内网域名、测试站点)会原样保留。
Q4:为什么设置了定时任务还要每天跑一次?
GitHub 的 IP 会动态变化,每天同步一次可以保证解析始终指向最新、最快的节点,防止”改完几天就失效”。
Q5:脚本会不会覆盖系统默认的 hosts 内容?
不会。首次使用时是”追加插入”,之后的每次更新都是”定向替换”,系统默认的 localhost 等条目不受影响。
九、写在最后
这套脚本我已经在实际环境(Windows 10 / Ubuntu 22.04)上验证过:插入、更新、幂等跳过三种场景全部通过测试。你只需要部署一次 + 安装定时任务,之后 GitHub 的 hosts 配置就会每天自动保持最新,彻底告别手动改文件、清缓存的重复劳动。
如果你有更好的思路或踩到了坑,欢迎在评论区交流讨论。
文章中的脚本及数据源为个人维护的开源方案,使用前请自行评估风险。修改 hosts 属于系统级配置操作,请以管理员/root 权限执行。
本文文章脚本下载地址:
分享名称: GitHub加速
分享链接: https://kb.itpno.com/#s/ED-MsOLZ
提取密码: nu8H