访问 github 太慢?我写了一个开源小工具一键变快 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bryan31
V2EX    Java

访问 github 太慢?我写了一个开源小工具一键变快

  •  2
     
  •   bryan31 2020-08-24 14:58:20 +08:00 7187 次点击
    这是一个创建于 1877 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    GitHub 应该是广大开发者最常去的站点,这里面有大量的优秀项目,是广大开发者寻找资源,交友学习的好地方。尤其是前段时间 GitHub 公布了一项代码存档计划Arctic Code Vault,要把代码埋入地下 250 米深的永久冻土层,可以将代码保存一千年。此外,GitHub 还为开发者在配置文件中设计了纪念徽章。

    想想自己的代码可以作为人类的技术瑰宝被保存一千年,是不是有点自豪呢。

    虽然 GitHub 没有被 Q,但是由于 CDN 服务器都在国外,所以国内访问 GitHub 的速度实在是慢的一匹,有时候经常页面刷不出,在我获取知识的道路上增加了重重的阻碍。

    所以,我肝了 3 小时,写了一个在不用 T 子的情况下,加速 GitHub 访问速度的小工具,最后会分享给大家。

    同时,这篇文章也会分享其他加速 GitHub 访问的方法。算是一个比较全的整理吧。

    Let's get it!

    自动生成最快访问 host 的小工具

    GitHub 在国内访问速度慢的原因其实有很多,但最主要的原因就是 GitHub 的分发加速网络域名遭到 DNS 的污染。为了解决这个问题,网上有很多文章提供了一个解决方案,就是通过修改 Hosts 文件,绕过国内的 DNS 解析,直接访问 GitHub 的 CDN 节点,从而达到加速的目的。

    但是我看大多数关于此方法的介绍,只提供 3 个 github 的相关域名,而且需要在ipaddress.com 一个个去查,根据查到的 ip,再去自己 ping,肉眼选取最快的 ip,自行编辑成 IP+域名格式,贴到 hosts 文件里。

    其实 GitHub 用到相关域名有很多,我整理了下,一共有十几个

    github.global.ssl.fastly.net github.com assets-cdn.github.com documentcloud.github.com gist.github.com help.github.com nodeload.github.com codeload.github.com raw.github.com status.github.com training.github.com avatars0.githubusercontent.com avatars1.githubusercontent.com avatars2.githubusercontent.com avatars3.githubusercontent.com 

    这要是一个个去查,一个个去选取,也是挺麻烦的。

    为此我写了一个工具,能自动的根据你当前 ip,去寻找这十几个域名所对应最快的 CDN 节点,如果一个 ip 对应多个 CDN 节点,工具会自动帮你去 ping 10 次,取到平均值最小的 CDN 的 IP 地址。

    你需要做的,只是把最终生成的结果贴到你的 hosts 文件中即可。

    这个小工具,关注「元人部落」输入 github 即可获取到。

    用法很简单,只需要执行以下命令即可运行

    java -jar githubhost.jar 

    运行起来后,浏览器输入127.0.0.1:8880即可自动进行根据你当前 Ip 进行分析:

    file

    分析大概需要十几秒,进度条会自动刷新,等进度条满了之后,即可看到生成内容:

    file

    每个地区每个运营商可能运行出来的都不一样,所以得出结果后,你就可以把这段内容追加到你 hosts 文件中(如果不知道 hosts 存放位置,可以自行 baidu),然后根据提示让 hosts 文件生效。

    指定了 CDN 的访问地址,可以让你的 github 访问至少无卡顿了。

    码云 GitHub 镜像站

    码云提供了一个”码云急速下载“站,每天从 github 上同步一些项目。

    https://gitee.com/mirrors

    个人感觉应该不是所有的 github 项目都会同步过来,看仓库数量,有大概 15k 的项目

    file

    如果你想 clone 一些项目去研究,可以先在这里找找有没有。码云因为是国内开源项目站点,git clone 速度自然不用担心,但是很可惜的是

    1.这个镜像站点不是所有的 github 项目,不过大多数热门项目都会有

    2.issue 和 release 包也没有,只有代码

    3.有一天的延迟。即你看到的是一天前的项目状态

    4.因为不是 github,所以你也没法通过这个 push 到 github 上的项目

    GitHub 镜像站

    这个镜像站为:

    https://github.com.cnpmjs.org/

    进入之后,完全和 github 没有任何区别,访问也很快。

    尤其是 clone 代码,那是飞快啊。。。

    比如,你原先要 clone,这样写

    git clone https://github.com/kubernetes/kubernetes.git 

    现在改成:

    git clone https://github.com.cnpmjs.org/kubernetes/kubernetes.git 

    试一下:

    file

    这个速度,应该无欲无求了吧。。。

    不过这个方法可惜的是:

    1.这个镜像站很不稳定,你时常会看到:

    file

    2.你每次 clone 还需要自己去修改 url,有点不方便

    3.你依旧没法 push

    GitClone 站点

    在寻找解决之道的途中,我又发现一个站点:gitclone

    https://gitclone.com/

    file

    这是一个 GitHub 的缓存加速节点,也大约缓存了 15k 个项目,但是 gitclone 单独做了一个站点,里面可以进行搜索项目,甚至于还可以创建仓库。

    gitclone 的 clone 提供了多种方式来 clone

    file

    但是搜索到的项目,最终查看还是跳转到 GitHub 相应的页面。

    所以其实和 gitee 镜像站都差不多。换汤不换药,问题和之前几个镜像站点差不多,不过你只是要 clone,还是不错的选择。

    总结

    其实在不用 T 子的情况下,方式无非就两种:

    1. 修改 hosts,直接访问最快的 CDN 节点,这种方式优势在于原汁原味。
    2. 通过镜像去访问和 clone,这种方式优势在于 clone 的速度。

    个人推荐如果主要浏览为主,还是用上文推荐的工具去生成 hosts 进行配置,毕竟原汁原味,clone 大项目的话,可以考虑以上镜像站点去加速下载。

    关注作者

    最后把这个开源工具分享给大家,关注「元人部落」公众号,并回复 github 即可获取到这个工具 jar 包。启动后访问 127.0.0.1:8880 端口即可自动生成。

    一个坚持做原创的技术科技分享号,希望你能关注我,我每周会出一篇实用的原创技术文章,陪着你一起走,不再害怕。

    img

    41 条回复    2020-09-08 14:30:43 +08:00
    imdreamer
        1
    imdreamer  
       2020-08-24 15:02:22 +08:00   4
    好文章
    不过我 proxy_on 代理一开,速度拉满
    ddzy
        2
    ddzy  
       2020-08-24 15:02:47 +08:00
    1
    mh
        3
    mh  
       2020-08-24 15:08:17 +08:00   12
    需要关注公众号、要有 java 环境,还需要运行这个 jar 包,一套操作下来还不如开个代理省事
    GrayXu
        4
    GrayXu  
       2020-08-24 15:13:20 +08:00
    问题是,代理的成本非常低,没必要这样绕一圈
    shm7
        5
    shm7  
       2020-08-24 15:29:56 +08:00
    卧槽,git proxy 不行吗?搞这么复杂干啥?
    madpecker009
        6
    madpecker009  
       2020-08-24 15:30:11 +08:00
    好东西 star
    d5
        7
    d5  
       2020-08-24 15:34:23 +08:00 via iPhone
    很棒,可以提供 go 版本吗?或者网页在线版本。java 的环境一大堆不太轻量。
    bryan31
        8
    bryan31  
    OP
       2020-08-24 15:43:56 +08:00
    @d5 我不会 go,但是我可以给你一个不装 java 也可以执行的版本。可以通过公众号加我私人微信,我可以提供给你
    byzf
        9
    byzf  
       2020-08-24 15:56:23 +08:00   1
    dns 代理目前还是免费的.

    思路还可以,吸粉的同时还筛了粉
    leaderhyh
        10
    leaderhyh  
       2020-08-24 15:57:38 +08:00
    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at com.yomahub.githubhost.controller.HostsController.getBestCdnIpForHost(HostsController.java:119)
    bryan31
        11
    bryan31  
    OP
       2020-08-24 16:09:38 +08:00
    @leaderhyh 刚刚也有人反馈了,已经解决了,重新拉下工具 jar 包,就可以了
    Redbeanw
        12
    Redbeanw  
       2020-08-24 16:13:20 +08:00
    看你这一波操作...

    路由器代理 /tapDriver 了解一下,
    chendy
        13
    chendy  
       2020-08-24 16:16:38 +08:00
    这一顿操作何必呢,核心逻辑估计就一个 java 文件…
    ochatokori
        14
    ochatokori  
       2020-08-24 16:27:25 +08:00 via Android   1
    都用 java 了,不送佛送到西帮忙写进 host 吗
    justin2018
        15
    justin2018  
       2020-08-24 16:29:20 +08:00
    今日头条是不是有一篇 我早上上班的时候 瞅到了
    bryan31
        16
    bryan31  
    OP
       2020-08-24 16:30:16 +08:00
    @ochatokori 哥,我能写到 hosts 里,我就可以删你 hosts 和删你系统文件,这不就变病毒了嘛。系统都会保护这些重要文件的,不让修改的。
    bryan31
        17
    bryan31  
    OP
       2020-08-24 16:30:49 +08:00
    @justin2018 我没在今日头条发过,估计是转载吧,我去瞅瞅
    bryan31
        18
    bryan31  
    OP
       2020-08-24 17:04:37 +08:00
    @GrayXu 纯属做着玩玩,分享下,有些人可能找不到好的代理。我自己有时也挂梯子。
    justin2018
        19
    justin2018  
       2020-08-24 17:15:08 +08:00
    cuixiao603
        20
    cuixiao603  
       2020-08-24 17:17:48 +08:00
    总感觉把问题复杂化了啊
    cuixiao603
        21
    cuixiao603  
       2020-08-24 17:23:11 +08:00
    不知道这个原理是什么样的,如果我做成服务端别人访问的话,是否可行呢。这样的话就有一定的价值了
    g00001
        22
    g00001  
       2020-08-24 17:27:52 +08:00
    github 官方有提供 API 获取 IP 列表,
    win2ray 有个 github 加速工具,一键改 hosts 提速。


    提速效果明显。
    g00001
        23
    g00001  
       2020-08-24 17:28:20 +08:00
    knightdf
        24
    knightdf  
       2020-08-24 17:34:05 +08:00
    莫名反感码云
    bryan31
        25
    bryan31  
    OP
       2020-08-24 18:15:39 +08:00
    @justin2018 嗯,我看到了,他是转载我公众号“元人部落”里的文章的
    bryan31
        26
    bryan31  
    OP
       2020-08-24 18:16:22 +08:00
    @cuixiao603 实现原理就是去请求 ipaddress.com 这个站点,根据请求的 ip 来获得最快的 cdn 节点。所以一定要本地运行 ,如果做成在线版,那拿到的 ip 就是在线版服务器所在的 ip,那每个人获取到的都是一样的了。这个页面也不支持传入相应的 ip,所以没法通过透传 ip 来解决。所以只能本地运行,获取的结果才是最准确的
    BrandonNg
        27
    BrandonNg  
       2020-08-24 19:21:51 +08:00
    okampfer
        28
    okampfer  
       2020-08-24 19:48:01 +08:00
    既然是开源工具,能否提供下源码?我想把它移植到我熟悉的语言上面。
    suzic
        29
    suzic  
       2020-08-24 19:59:47 +08:00 via Android
    有源码吗?
    suzic
        30
    suzic  
       2020-08-24 20:03:58 +08:00 via Android
    源码在公众号提供了链接
    0x4F5DA2
        31
    0x4F5DA2  
       2020-08-24 20:11:13 +08:00
    教育网无所畏惧(
    laycher
        32
    laycher  
       2020-08-24 20:15:52 +08:00
    能不能做成网站,我直接打开网址后生成 hosts 的内容。
    Trim21
        33
    Trim21  
       2020-08-24 20:21:39 +08:00
    “此外,GitHub 还为开发者在配置文件中设计了纪念徽章。”怎么有一种机翻的感觉...
    masker
        34
    masker  
       2020-08-24 20:31:51 +08:00 via Android
    用个代理应该不难吧?怎么 2020 年还有人大费周章去折腾这些?真就怕自己的数据被人监听啦?不是吧
    baiduyixia
        35
    baiduyixia  
       2020-08-24 20:31:57 +08:00
    您是想访问 github.com 吧?
    您刚才尝试访问的网站貌似为虚假网站。攻击者有时会对网址做些令人难以发现的细微更改来仿冒网站。
    bryan31
        36
    bryan31  
    OP
       2020-08-24 21:46:53 +08:00
    @laycher 请参照 26 楼我的回复
    SingeeKing
        37
    SingeeKing  
    PRO
       2020-08-25 08:01:08 +08:00 via iPhone
    raw.githubcontent.com 竟然没包括
    farmer01
        38
    farmer01  
       2020-08-25 08:14:15 +08:00   1
    一个小建议,最好用 TCPING 而不是 ICMP 的 Ping 。
    因为实际网络应用中,运营商可能会对 ICMP 进行优化从而得不到准确的网络连接质量的信息。
    而 TCPING 就是模拟实际 TCP 第一次握手过程,计算延迟,这样算出来的延迟在公网上比 ICMP 的 Ping 更加准确。
    xiaoyu18369
        39
    xiaoyu18369  
       2020-08-25 10:48:13 +08:00
    打个 tag
    bryan31
        40
    bryan31  
    OP
       2020-08-26 13:04:43 +08:00
    @farmer01 受教了
    127000
        41
    127000  
       2020-09-08 14:30:43 +08:00
    补充个镜像服务,支持 github release 下载
    doc.fastgit.org/en-us/node.html
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3507 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 10:39 PVG 18:39 LAX 03:39 JFK 06:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86