解决 GitHub 访问慢的办法
# 65.解决 GitHub 访问慢的办法
聊聊如何解决 GitHub 访问失败/缓慢的问题。
# 原因
由于 GFW 的原因,在国内访问 GitHub 完全是看缘分。
早在 2013 年 1 月,李开复 (opens new window)就开始在微博抗议了:
【强烈抗议封锁 GitHub] GitHub 是全球最大的社交编程及代码托管网站,近日在国内遭全面屏蔽。在 GitHub 的 300 万会员中,中国是第四大国。GitHub 是程序员学习和与世界接轨的首选工具。GitHub 并无意识形态,也没有反动内容。封锁 GitHub 毫无道理,只会导致国内程序员和国际脱轨,失去竞争力和前瞻性。转!
当时的动静也挺大的,抗议后,也是有一段时间能正常访问了。不过现在嘛……
# 原理
我们在浏览器输入 GitHub 的网址时,会向 DNS 服务器发送一个请求,获取到 GitHub 网站所在的服务器 IP 地址,从而进行访问。
就像你是一名快递员,在送快递前要先找中间人询问收件人的地址。而 DNS 就是这个告诉你目标地址的中间人,如果 DNS 告诉了你错误的地址、或者请求被拦截、再或者 DNS 挂了,都会导致你无法访问网站。
那么根据这个原理,可以得出的解决办法:
- 使用代理服务器
- 修改 hosts,绕过 DNS
接下来说说我了解到的解决办法。
# 方法一:魔法上网
如题,直接用魔法上网,使用代理,解决墙的问题。
如果你看不懂,那么请忽略该方法。
# 方法二:改 hosts 文件
还是科普下吧:
hosts 文件是一个纯文本文件,存在于几乎所有的操作系统中,用于将主机名映射到 IP 地址。
简单来说,就是将 GitHub 服务器的地址直接写到 hosts 文件里,绕过 DNS 的解析。
hosts 文件在每个系统的位置不一:
- Windows 系统:
C:\Windows\System32\drivers\etc\hosts
- Linux 系统:
/etc/hosts
- Mac(苹果电脑)系统:
/etc/hosts
- Android(安卓)系统:
/system/etc/hosts
- iPhone(iOS)系统:
/etc/hosts
注意,修改该文件的话:
- Windows、Linux、Mac 使用 Root 权限
- iPhone、iPad 须越狱
- Android 必须要 root
# Windows
以 Windows 为例,文件的路径是:C:\Windows\System32\drivers\etc
由于该文件比较重要,一般是不能直接修改的。解决方法有:
- 以管理员权限运行记事本,然后打开该文件进行编辑,然后保存
- 将该文件复制到桌面或其他文件夹,修改后复制回去(会提示要管理员权限)
- 在该文件上右键 → 打开文件属性 → 将“只读”取消勾选并应用保存
以第一个方法为例,首先以管理员权限打开记事本:
在记事本里打开该文件,即可进行编辑。
如果打开所在文件夹后,如果看见文件夹是空的,请修改下方选择框中的文件类型为“所有类型”:
修改方式:将 IP 和域名填写到该文件末尾,注意两者直接有个空格( xx 为你查询到的 IP 地址):
xx.xx.xx.xx www.github.com
# Linux / Mac
而对于 Linux / Mac 用户来说,文件的路径是:/etc/hosts
修改方法:
- 通过 vim,例如
sudo vim /etc/hosts
- 通过追加符,例如
echo 127.0.0.2 google.com >> /etc/hosts
- 其他常用命令......
至于 iPhone,iPad,Android 的修改 hosts 场景很少见,也挺麻烦,这里就不展开了。
# 如何查询 IP
可以通过 IP 查询工具(例如 ipaddress.com (opens new window)),打开后输入要查询的域名,即可查到对应的 IP 地址。
也可以通过 GitHub520 (opens new window),这个 GitHub 项目,作者每天会更新一份完整的 hosts 列表,无需大家自己查询,直接拿来用即可。
也可以用 fetch-github-hosts (opens new window),这和上一个项目是类似的,官网:hosts.gitcdn.top (opens new window)
# 刷新 DNS 缓存
修改完 hosts 文件后,如果还不能正常访问,那就试试刷新下 DNS 缓存,在命令行里执行:
-
Linux
:/etc/init.d/network restart
-
Windows
:ipconfig /flushdns
-
Macos
:sudo killall -HUP mDNSResponder
如果上述方法无效,那就再试试重启机器。
如果还不行,那就只能换个方法了。
# 自动更新 hosts
如果每天都手动更新 hosts 文件,也太麻烦了,为此可以借住一些图形化工具来完成,例如 SwitchHosts (opens new window),配置参考下面:
- Hosts 类型:
Remote
- Hosts 标题: 随意
- URL:
https://raw.hellogithub.com/hosts
(这个是 GitHub520 (opens new window) 提供的 hosts 文件,会定期更新) - 自动刷新: 最好选
1 小时
也可以借住自动任务(例如 Linux 的 crontab)来完成更新。Unix/Linux 一键使用:
sed -i "/# fetch-github-hosts begin/Q" /etc/hosts && curl https://hosts.gitcdn.top/hosts.txt >> /etc/hosts
# 方法三:使用第三方下载
如果以上方法都不行,可以换种思路:直接将 GitHub 上的项目下载到本地。
现在有很多支持 GitHub 加速下载的网站,比如 GitClone.com (opens new window),输入项目名即可高速下载!
该方法的缺点:
- 如果项目过大,下载起来也挺麻烦
- 看不到对应项目的 issue 等,也不能进行 PR 等操作
如果你仅仅是想看看文档、源码等,该方法也是可以的。
还可以用 Offcloud (opens new window),号称当前离线下载服务的最佳选择之一。除了常规的 BT 或磁力链接下载外,它还支持 YouTube、Vimeo 等视频网站和 Dropbox、百度网盘等在线储存服务的链接,免去在各客户端间切换的烦恼。
输入邮箱即可免费注册,登录后选择 instant,然后复制 GitHub 项目的 zip 链接,点击 Dowload 即可快速下载。
其他加速下载网站:
GitHub 加速下载 - 在线工具:https://github.ur1.fun (opens new window)
加速你的 Github:https://github.zhlh6.cn (opens new window)
FAST-GitHub:https://fhefh2015.github.io/Fast-GitHub (opens new window)
Offcloud.com (opens new window):号称当前离线下载服务的最佳选择之一,支持 BT、YouTube、Vimeo 等视频网站和 Dropbox、百度网盘等在线储存服务的下载。
例如,输入 GitHub 项目的 zip 链接即可加速下载(右键 → 复制链接地址)
# 方法四:使用 Gitee
Gitee 支持在新建项目时,直接导入已有的 GitHub 仓库。想要下载哪个项目的源码,直接输入对应的 GitHub 仓库地址即可:
还可以随时将 Gitee 的仓库和 GitHub 仓库进行同步。同步后,你就可以在 Gitee 上提交和管理代码了:
此外,也可以下载项目后重新关联远程仓库为 GitHub。
# 最后
GitHub 是 全球知名的代码开源平台。这里有千万个项目的源代码,可以和各位编程技术大牛交流学习,也可以发布自己的开源项目,利用平台进行代码托管。
如今 GitHub 的功能越来越强大了,比如工作流、仓库图表可视化、在线开发、项目页面等,即使你是 GitHub 的老用户,我相信很多功能你也未必知道。
总之,想要提升自己的编程技能,就必须要掌握 GitHub 的用法!为此,首先就得先解决访问失败的问题。
# 参考
https://github.com/521xueweihan/GitHub520 (opens new window)
https://github.com/Licoy/fetch-github-hosts (opens new window)
https://github.com/oldj/SwitchHosts (opens new window)
GitHub 访问不了?砸墙狂魔教你几招 - 程序员鱼皮 (opens new window)
国内访问 Github 慢的解决方法 - 阿小信的博客 (opens new window)