git推送大文件失败主因是github 100mb单文件限制或git lfs配额超限,需先判断是否启用lfs追踪、清理历史大文件、检查lfs用量,或改用submodule/外部链接替代。
macos 上 git 推送大文件报“存储空间不足”,实际不是本地磁盘满,而是触发了 github 的 100mb 单文件限制 或 git lfs 配额超限。常见错误日志里会出现 exceeds github's file size limit of 100.00 mb 或 this repository exceeded its lfs budget。修复关键在于:先判断是「没用 lfs 直推大文件」,还是「用了 lfs 但配额不够」,再针对性处理。
确认是否已启用 Git LFS 并追踪目标文件
很多用户装了 Git LFS,但忘了配置追踪规则,结果大文件仍走普通 Git 流程被拒。
- 运行
git lfs ls-files,若无输出,说明当前仓库未启用 LFS 或没设置追踪 - 检查
.gitattributes文件是否存在,内容是否包含类似*.pth filter=lfs diff=lfs merge=lfs -text的规则 - 如果没配置,立即补上:比如模型文件常用
git lfs track "*.pth",数据包常用git lfs track "*.tar.gz" - 执行
git add .gitattributes并提交,否则追踪规则不生效
清理已误提交的大文件历史(必须做)
哪怕现在启用了 LFS,之前直接 commit 过的 >100MB 文件仍留在 Git 历史中,远程仓库会持续拒绝推送。必须重写历史、移除这些 blob。
GInstall OneClick — 一键安装 GitHub 项目:规划、克隆、安装 Node 依赖、运行开发脚本。适用于想要获取 GitHubNode.js 项目的用户。
- 安装
git-filter-repo(推荐,比老版bfg更安全):brew install git-filter-repo - 删除指定大文件(如
vgg16_method1.pth)的所有历史记录:git filter-repo --path vgg16_method1.pth --invert-paths - 若要批量清理所有超过 100MB 的文件:
git filter-repo --strip-blobs-bigger-than 100M - 强制推送到远程(会改写历史):
git push origin --force --all && git push origin --force --tags
检查并升级 Git LFS 存储配额
GitHub 免费账户只提供 1GB LFS 存储 + 10GB 月带宽。如果模型或数据集累计上传超量,就会报 budget 超限。
- 登录 GitHub → Settings → Billing and plans → Git LFS usage,查看实时用量
- 清理不用的 LFS 对象:
git lfs prune(删本地缓存)+git lfs migrate import --include="*.old" --exclude="*" --force(慎用,可选) - 若确需更多空间,可升级为 Pro 账户(10GB 存储),或把非必要大文件迁出 GitHub(如放至 Hugging Face Hub、阿里云 OSS 等)
替代方案:不用 LFS,改用 submodule 或外部链接
如果只是偶尔分发模型/数据,且不需版本化管理大文件,LFS 反而增加复杂度。
- 把大文件单独放在另一个公开仓库(如
my-data-bin),用git submodule add https://github.com/user/my-data-bin.git data/ - 在 README 中提供下载链接(如 GitHub Releases、Google Drive、百度网盘),并用
curl -L -o file.zip URL自动获取 - 适合一次性交付场景,避免 Git 历史膨胀和平台配额压力










