先把那次事故讲一下
2022 年秋天,我在做一个客户的交付项目,图省事把一批 PSD 源文件和两段 1080p 的录屏演示直接扔进了同一个私有仓库。前两次 push 都过了,第三次终端开始转圈,卡了大概四分钟,然后吐出一行红字:
remote: error: File demo_v3.mp4 is 187.42 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected.
那个仓库的历史记录当时已经堆到 1.2G 左右了。要从历史里彻底抹掉这些大文件,得用 git filter-repo 重写全部 commit 再 force push,本地和另外两个协作者的分支全废。那天我干到凌晨两点,就为了干这一件事。
从那之后我才认真去读了 GitHub 的配额文档。读完的结论是:大部分人以为 GitHub 的「免费」就是无限,其实它是一套分层很细的计量体系,只是平时不触发,你根本感觉不到它存在。
免费额度里真正会咬人的三层
第一层是仓库本身。GitHub 对单个文件是硬性 100MB 上限——不是警告,是直接拒绝 push,你连商量的余地都没有,除非上 Git LFS。仓库总量上,官方推荐控制在 1GB 以内,到 5GB 会给你发提醒,但它不封你。很多人仓库几十个 G 也照样在用,只是 clone 一次要等十分钟,CI 每次拉代码都在烧钱。
第二层是 Git LFS。这东西名字很像「免费大文件存储」,其实完全不是。免费账号给的是 1GB 存储 + 每月 1GB 下载带宽(bandwidth)。注意,是下载带宽——别人 clone 你的仓库、CI 拉一次代码,全都算在这 1GB 里。一旦用完,LFS 请求直接返回 403,你的 CI 会莫名其妙失败,而且报错信息特别含糊,我第一次遇到时查了三个小时才反应过来是带宽耗尽。想加量,5 美元买 50GB 数据包,存储和带宽分开算。我有个做游戏的同学,美术资源全走 LFS,每个月的带宽账单比他 Pro 的年费还高。
第三层是 Actions,也是最容易忽略的。免费账号在私有仓库每月 2000 分钟,但关键是分钟数要乘倍率。Linux runner 是 1 倍,Windows 是 2 倍,macOS 是 10 倍。也就是说,2000 分钟在 macOS runner 上只等于 200 分钟,一个稍微像样点的 iOS 构建矩阵就能吃掉一大半。我的流水线是 macOS 打包加 Linux 跑测试,账单页面上显示「已使用 1860 分钟」——那是按倍率折算之后的数字,原始执行时间其实只有三百多分钟。
Pro 到底买的是什么
GitHub Pro 是 4 美元一个月,个人账号。很多人冲上去买,是看到「Actions 3000 分钟」觉得翻倍了。但说实话,从 2000 到 3000 这个提升对个人开发者意义不大,真正该让你掏钱的场景根本不是这个。
我列几个我实际用到过的差异(数字以官方 pricing 页为准,GitHub 这几年改过好几轮):私有仓库的 branch protection 规则、代码所有者、必需 reviewer 这些,在 Free 的私有仓库里是受限的;从私有仓库发布 Pages 站点,Free 也不支持;Codespaces 的免费额度 Free 账号是每月 120 core-hours 加 15GB 存储,Pro 会多一点但没翻倍。
我的判断是:如果你只有一个私有仓库、不需要保护分支、不用 Pages 发私有站点,Pro 对你的价值接近于零。省下这钱不如留着付 LFS 的带宽或者买 Codespaces 时长。
反过来,如果你在维护开源项目,那 3000 分钟这条根本不用看——公开仓库的 Actions 是无限免费的。这也是 GitHub 上一个公开的秘密:有人把私有仓库临时改成 public,跑完 CI 再改回去。技术上可行,但你要想清楚,公开的那一瞬间,全部历史提交、issue、fork 关系就已经暴露在搜索引擎和爬虫面前了,改回去也不会消失。我干过一次,第二天发现有人已经 fork 了。
真正该对比的不是免费和付费
我把 GitHub 的配额跟 GitLab、Gitee 摆在一起算过一笔账,结论有点反直觉。
GitLab 免费版给的 CI 分钟数是每月 400 分钟(共享 runner),比 GitHub 的 2000 少得多,但它的 runner 倍率算法不一样,而且自建 runner 完全免费,只要你有机器。Gitee 的 Pages 在国内访问快,但并发构建限制和仓库体积限制又是另一套逻辑。真正决定你选哪个的,往往不是分钟数本身,而是你的代码在哪儿、协作者在哪儿、构建机器在哪儿——这三件事比任何配额表都重要。
GitHub 免费版的设计思路,我觉得是一个「让人察觉不到上限的试用期」:仓库数量不限、协作者不限(2020 年 4 月之后才放开)、公开仓库 Actions 无限。它把成本压在两个地方——私有大文件和私有仓库的 CI 时间。这两个恰好是大团队会撞上、个人开发者不太会撞上的位置。
所以如果你被 GitHub 的配额卡过,第一件事不是去升级付费计划,而是先搞清楚自己卡的是哪一层。我见过太多人冲着「Pro 有 3000 分钟」去付费,结果实际卡住他的是 LFS 的 1GB 带宽,两件完全不同的事。先看账单页面,再看 pricing 页,顺序搞反了就白花钱。