遇到 Remote error: File too large 报错,最直接的解决办法是使用 Git LFS 管理大文件,或者从历史记录中彻底移除该文件,具体取决于你是否需要保留该文件。
先说结论:平台通常限制单文件大小(如 GitHub 限制 100MB),超过限制必须改用 Git LFS 或清理历史,普通 commit 无法绕过。
- 先确认:查看报错文件中哪个具体文件超标,确认是否必须保留。
- 先处理:安装配置 Git LFS 追踪大文件,或使用 filter-repo 清除历史中的大文件。
- 再验证:执行 git lfs ls-files 确认追踪状态,尝试再次 push 观察是否报错。
前置准备:安装必要工具
Git LFS 和 git-filter-repo 并非所有环境默认安装,操作前请确保环境就绪。
# 安装 Git LFS
git lfs install# 安装 git-filter-repo (Python 环境)
pip install git-filter-repo# macOS 用户也可通过 brew 安装
brew install git-filter-repo
为什么会这样
Git 仓库托管平台(如 GitHub、GitLab、Gitee)为了保障服务性能,会对单文件大小和仓库总大小设限。例如 GitHub 明确规定单文件超过 100MB 禁止推送。Git 本身是版本控制系统,每次提交都会保存文件快照,如果大文件直接进入历史,会导致仓库体积迅速膨胀,克隆和拉取速度变慢。
Git LFS 的原理是将大文件内容存储在远程服务器单独的空间,本地只保存一个文本指针,从而绕过 Git 对普通对象的大小限制。
分步处理
1. 确认超标文件
先找出是哪个文件导致的报错。如果报错信息不明确,可以在本地检查近期提交的大文件:
# 查看仓库对象大小分布(需配合其他命令定位具体文件)
git count-objects -vH# 查看最近提交中变更的文件及大小
git log `--diff-filter`=M `--summary` | head -20
2. 方案一:使用 Git LFS(推荐保留文件)
如果文件需要保留,必须将其纳入 LFS 管理。注意,如果该文件已经存在于之前的提交历史中,仅仅跟踪新版本是不够的,必须重写历史。
- 安装 LFS:git lfs install
- 跟踪文件:git lfs track "*.png"(替换为实际扩展名)
- 提交配置:git add .gitattributes
- 清理历史中的大文件:使用 git filter-repo 移除历史中的大文件 blob,让 LFS 重新接管。
- 强制推送:git push `--force`(注意协作风险)
# 追踪特定类型文件(例如 zip)
git lfs track "*.zip"# 提交 .gitattributes 配置
git add .gitattributes# 如果文件已经提交过,需要清理历史(需谨慎)
git filter-repo `--strip-blobs-bigger-than` 100M
3. 方案二:彻底移除文件(不需要保留)
如果文件是误提交(如编译产物、本地配置),直接从历史中删除:
# 备份当前分支以防万一
git branch backup-branch# 从历史中移除特定路径文件
git filter-repo `--path` path/to/large/file `--invert-paths`
完成后强制推送覆盖远程历史。
怎么验证是否生效
1. 查看 LFS 追踪列表:
git lfs ls-files
如果文件出现在列表中,说明已被 LFS 接管。
2. 尝试推送:
git push origin main
如果不再出现 Remote error: File too large,且进度条显示 LFS 上传状态,则处理成功。
3. 检查仓库大小:
在托管平台页面查看仓库大小是否增长异常,或本地 clone 一个新仓库测试速度。
常见坑
- 历史未清理:只对新文件开启 LFS 是不够的,如果大文件已经在历史提交中,远程仓库依然会拒绝推送,必须重写历史。
- LFS 配额限制:Git LFS 通常有存储空间和带宽限制,免费账户可能有额度上限,大文件过多可能触发 LFS 配额报错。
- 强制推送风险:清理历史需要 git push `--force`,这会覆盖远程历史,团队协作时需通知成员重新 clone 或 reset。建议操作前先备份仓库。
- .gitattributes 提交:忘记提交 .gitattributes 文件会导致其他成员无法正确追踪 LFS 文件。
- 工具未安装:git-filter-repo 不是 Git 自带命令,未安装直接运行会报 command not found。
参考来源
- GitHub Docs: About large files on GitHub (https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-large-files-on-github)
- Git LFS Official Documentation: Installing Git LFS (https://git-lfs.com/)
原文链接:https://www.zjcp.cc/ask/11165.html
