注意:由于某些特殊原因,本文没有在CSDN上发布,因此这里是本文唯一可见的地址。
相信大家工作时都难免会遇到。。。
$ git push
Error: Failed to connect to github.com port 443: Timed out
$ git push
Error: OpenSSL SSL_read: Connection was reset, errno 10054
$ 滚
滚: command not found
$ sudo rm -rf /*
先上ipaddress查一下GitHub的IP地址(有时会403),如图所示:
过一会再查一下:
!!!两次结果不一样!!!
后来发现,GitHub
的服务器IP变化极其频繁,平均每半小时变一次,最快时3~5分钟就能变一次。我们知道,系统中有个叫DNS 解析缓存的东西,会存下来我们DNS的解析结果(也就是最近访问的网站的服务器IP),因此需要想办法重新获得正确的IP!!!
下面提供三种方法,可供参考,希望对大家有帮助。
注意:此方法仅适用于Windows系统。
可以配合后面的修改DNS方法,效果更佳。
在GitHub
访问不了的时候,按下Win+R,执行:
ipconfig /flushdns
这就是大名鼎鼎的「Windows DNS缓存刷新命令」。
若看到下列输出,则算成功:
Windows IP 配置
已成功刷新 DNS 解析缓存。
这时,重新打开GitHub
或使用git
远程操作,就大概率能成功了。
这样有些麻烦,因为每次都必须得执行命令解决问题,下面有“进阶版”——自动执行:
这种方法与上面的“手动刷新”原理相同,但无需每次手动输入命令,方便很多:
打开notepad
,输入:
@echo off
:a
ipconfig /flushdns > NUL
echo [INFO %time:~0,8%] 已成功刷新 DNS 解析缓存。
echo 1分钟将再次刷新。按下任意键以立即刷新...
timeout /t 60 > NUL
echo.
goto a
按Ctrl+Shift+S另存为,选择一个位置,保存为.bat
后缀名的批处理文件(选择“所有文件”再自己输入后缀名),注意编码使用ANSI,否则会乱码!
下面直接双击刚才保存好的文件打开,会看到这样的输出:
[INFO HH:MM:SS] 已成功刷新 DNS 解析缓存。
1分钟将再次刷新。按下任意键以立即刷新...
这时,可将窗口最小化,程序会每分钟自动刷新一次,如果想提前刷新可以在里面按下任意键,会自动再刷新。
如果想更改刷新频率,可以在bat代码中修改:
@echo off
:a
ipconfig /flushdns > NUL
echo [INFO %time:~0,8%] 已成功刷新 DNS 解析缓存。
echo 1分钟将再次刷新。按下任意键以立即刷新...
timeout /t [freq (s), "60"=1min] > NUL
echo.
goto a
GitHub520 项目地址:https://github.com/521xueweihan/GitHub520
官网:https://swh.app/(有时会打不开)
镜像地址(非官方,自己弄的):https://gitee.com/GoodCoder666/GitHub520
这个项目的工作原理是,通过程序自动从ipaddress实时获取GitHub服务器的IP,并修改对应HOSTS,达到代替默认DNS进行IP解析的作用。
参考文档:GitHub520 README
镜像地址:https://gitee.com/goodcoder666/GitHub520/blob/main/README.md
打开https://raw.hellogithub.com/hosts,复制内容,添加到系统HOSTS文件的最后边。刷新一下DNS或重启电脑,启用新的IP解析。如果访问不了需要再次更新。
上述的方法明显太麻烦了,那有没有方法让电脑自动刷新呢?答案是肯定的。
使用「SwitchHosts」,就能实现自动刷新。
使用步骤:
从Release页面下载安装,并打开软件,应该能看到类似于下面的界面(不同操作系统下文件内容略有不同):
点击左上角的“+”号,弹出如下界面:
选择“远程”,输入:
标题:GitHub520
(随意)
URL:https://raw.hellogithub.com/hosts
自动刷新:任意,尽量选择5分钟或15分钟
点击“确定”,完成。
Tip:如果遇到这种情况,请提升 SwitchHosts 进程权限(Windows下的管理员身份运行等)
sed -i "/# GitHub520 Host Start/Q" /etc/hosts && curl https://raw.hellogithub.com/hosts >> /etc/hosts
自动更新/etc/hosts
文件,可以添加到cron定时执行。使用前确保Github520内容在该文件最后部分。
在 过滤器>DNS 封锁清单>添加阻止列表>添加一个自定义列表,配置如下:
名称: 随意
URL: https://raw.hellogithub.com/hosts
(和上面 SwitchHosts 使用的一样)
如图:
更新间隔在 设置>常规设置>过滤器更新间隔(设置一小时一次即可),记得勾选上 使用过滤器和 Hosts 文件以拦截指定域名
Tip:不要添加在 DNS 允许清单 内,只能添加在 DNS 封锁清单 才管用。另外,AdGuard for Mac、AdGuard for Windows、AdGuard for Android、AdGuard for IOS 等等 AdGuard 家族软件 添加方法均类似。
FasterHosts 是个 Chrome 插件,主要原理是拦截浏览器的部分请求,将 domain
替换成访问速度较快的那个。HOSTS 资源来自 GitHub520,每 1 小时更新一次。
- 下载 FasterHosts 然后解压,找到
extension
子目录- 打开 Chrome,输入:
chrome://extensions/
- 打开「开发者模式」
- 选择「加载已解压的扩展程序」,然后定位到刚才解压的文件夹里面的
extension
目录,确定- 安装好了,可关闭「开发者模式」
Tip: Chromium 内核的浏览器都可以使用,其他主流的 Chromium 浏览器还有Edge,Yandex等。
Gitee相当于“中国版GitHub”,相对来说访问速度和稳定性都会好很多。
那么使用Gitee官方提供的镜像功能,可以暂时规避网络上的问题。
注意事项:
(1) 前三种方法只能解决无法访问的问题,但是下载速度太慢时也可以使用本法。
(2) 本方法仅针对代码仓库的访问问题,无法访问GitHub主页。
我们以Pygame的GitHub仓库(https://github.com/pygame/pygame)为例:
打开存储库,复制Git地址(只能选HTTPS)。如果打不开也没事,直接在GitHub的repo地址后面加上.git
就行了。
打开Gitee,选择从GitHub/GitLab导入仓库,填写信息:
点击“导入”,等待自动跳转:
这种方法主要针对自己拥有/管理的代码库网络访问不稳定的情况。原理就是创建Personal Access Token
(PAT)并交给Gitee,push镜像会将Gitee上的修改自动同步到GitHub上,而pull镜像则相反,会自动检测GitHub上的修改并同步至Gitee。
下面我们来分别介绍两种镜像的使用方式。
打开Personal Access Tokens,选择“Generate new token”,如图:
输入密码,转到“New Token”界面,填写信息,其中Note随意填写,Expiration为期限,建议选择60天,后面的权限建议勾选repo、workflow(仅push镜像)、repo_hook(仅pull镜像)。
点击下面的“Generate token”,生成令牌,点击复制:
完成!请看下面的“镜像配置”部分。
Gitee提供的镜像既可以用私有GitHub存储库,也可以配置公开的。为了方便演示,我们以私有的为例。
现在我在GitHub上创建了一个仓库GoodCoder666/test-mirror
(私有),如下:
然后使用3.1中的的方法导入,效果如下:
仓库就绪,下面创建镜像。
选择管理仓库镜像管理添加镜像,如图(需绑定对应GitHub账号):
选择镜像方向Push和GitHub仓库,再输入刚刚生成好的Token,如图:
点击“添加”,效果图:
此时,在Gitee上作出更改,会自动实时同步到GitHub上(可能有1~2分钟的延迟)
比如现在修改了Gitee这边:
然后看GitHub:
注意这里的gitee-org
,只有在Gitee网页版更改时会出现(我也不知道为啥),git push
时则正常。
与Push镜像相似,不同之处为Push是Gitee->GitHub,而Pull实为GitHub->Gitee的镜像。镜像配置请参考3.3.2 Push镜像配置
,注意Token需勾选admin:repo_hook
。
根据自己的网络情况,选择下表中的一种推荐的首选/备选DNS服务器地址,按照这里的方法修改DNS(此方法适用于Windows,其他操作系统请自行百度)
DNS组合 | 首选DNS | 备选DNS | 备注 |
---|---|---|---|
CNNIC+114 | 1.2.4.8 |
114.114.114.114 |
强烈推荐/成功率最高/响应最快 |
Google+114 | 8.8.8.8 |
114.114.114.114 |
成功率较高/响应较快/主流搭配 |
纯114DNS | 114.114.114.114 |
114.114.115.115 |
成功率较高/响应很快 |
114+Cloudflare | 114.114.114.114 |
1.1.1.1 |
成功率较高/1.1.1.1响应稍慢 |
GitHub访问慢的主要原因是由于DNS的问题导致的(也有部分CDN问题没有提及),刚才的三种方法分别是:
需要注意的是,没有方法能保证成功(Gitee镜像除外,但功能有限),然而成功率最高的是修改DNS,基本上可以说是一劳永逸。
希望以上内容能对大家有帮助!