首页/开发/Git 与协作速查/GitHub 大文件限制与应对
进阶与大仓实践69 条

GitHub 大文件限制与应对

GitHub 对单文件推送有硬限制:超过 100 MiB 的推送会被拒绝,超过 50 MiB 会给出警告;大文件应改用 Git LFS 或制品库。

Git 与协作速查开发更新于 2026-10-13

GitHub 大文件限制是什么

GitHub 对单文件推送有硬限制:超过 100 MiB 的推送会被直接拒绝,超过 50 MiB 会给出警告;大文件应改用 Git LFS 或制品库存放。数值是平台默认值,不同托管服务以各自文档与实例配置为准,处理思路一致但阈值可能不同。

基本信息

推送硬限单文件超过 100 MiB 会被阻止(平台默认)
警告阈值超过 50 MiB 时提示
推荐做法二进制素材/模型走 LFS;构建产物走发布附件或制品库
定位方法rev-list + cat-file 扫描找出超限文件
处理顺序先规范新提交,再评估是否需要重写历史

典型使用场景

  • 推送被拒时定位:确认是哪个文件超限、出现在哪一次提交。
  • 素材库规范:设计稿、模型文件入库前先配 LFS 跟踪规则。
  • 制品存放决策:构建产物、安装包不进 Git,改用发布附件或制品库。
  • 历史清理评估:已进入历史的大文件决定是否重写(成本高,谨慎)。
  • 新仓库预检:导入外部仓库前先扫描大文件,避免推送到一半被拦。

排查与处理

排查与处理
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '$1 == "blob" && $3 > 52428800 {print $3, $4}' | sort -nr | head
# 列出超过 50 MiB(52428800 字节)的对象
# 确认目标后:迁移 LFS 或从历史移除
# 推送仍被拒时对照硬限 100 MiB,先处理最大的文件

大文件处理对照

场景建议做法原因
设计稿/模型纳入 LFS 跟踪版本多、单文件大
构建产物发布附件或制品库可再生成,不必版本化
数据集外部存储加校验记录仓库不适合承载大体积数据
历史遗留大文件评估重写历史影响所有克隆方,需协调
把大文件从历史移除需要重写提交并由团队协调同步,按历史改写流程执行,不要单人直接强推覆盖远端;提前在团队内公告新历史切换时间。

易错点

  • 已进入历史的超大文件不清历史就一直在仓库里,即使当前提交已删除:克隆依然要下载全部历史。
  • 不同托管平台限额不同,自建 GitLab 以实例配置为准,不要照搬 100 MiB 这个数值。
  • 以为 .gitignore 能阻止已跟踪文件变大:一旦加入跟踪,忽略规则不再生效,需显式迁移或移除。
  • 把大文件拆小只绕过单文件限制,仓库总体积问题依旧,治标不治本;应优先 LFS 或外部制品库。

数据来源与参考

  • GitHub Docs:About large files on GitHub(文件大小限制)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌