V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bryan31
V2EX  ›  Java

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

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

    前言

    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  
       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   ·   实用小工具   ·   5788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:43 · PVG 09:43 · LAX 17:43 · JFK 20:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.