Github 上传文件超过100M时报错处理
内容提要
GitHub 上传超过 100MB 的文件会报错,可用 Git LFS 解决:安装 git-lfs 并执行 git lfs install,在仓库中用 git lfs track "*.pdf" 跟踪大文件,再 add、commit、push。若此前已用 LFS 提交仍报错,需用 BFG 清除历史大文件记录,执行 git reflog expire 与 git gc 清理,并临时允许强制推送后 git push -f。
延伸解读
Git LFS 的适用场景与操作要点
文章针对 GitHub 单文件超过 100MB 的报错,给出 Git LFS 的解决路径。核心是先用 find 命令找出大文件,再安装 git-lfs 并执行 git lfs install,随后用 git lfs track 指定需跟踪的文件类型(如 *.pdf),最后正常 add、commit、push。需注意,track 后要一并提交生成的 .gitattributes 文件,否则 LFS 规则可能不生效。
历史提交残留大文件时的补救措施
若此前已用 LFS 提交仍持续报错,说明历史记录中仍残留大文件。文章建议用 BFG 工具清除:先克隆仓库,执行 java -jar bfg.jar --delete-files 指定文件名并加 --no-blob-protection,再运行 git reflog expire 与 git gc 清理本地历史,最后强制推送。此操作会改写提交历史,需谨慎评估对协作分支的影响。
强制推送前的必要设置与风险提示
执行 git push -f 前,文章明确要求先在 GitHub 仓库设置中临时允许强制推送:进入 Setting → Branches → Add rules → Allow force pushes。这说明强制推送默认被保护规则阻止。清理历史属于破坏性操作,若仓库有他人协作,应提前协调,避免覆盖他人提交或造成分支混乱。
Q&A
GitHub 上传文件超过 100MB 报错怎么解决?
使用 Git LFS 解决:安装 git-lfs 并执行 git lfs install,在仓库中用 git lfs track "*.pdf" 跟踪大文件,然后 git add .gitattributes、git add 大文件、git commit、git push。
如何安装和配置 Git LFS 来跟踪大文件?
安装 git-lfs(可从 GitHub 或 packagecloud 下载),执行 git lfs install 初始化,然后在仓库中运行 git lfs track "*.pdf" 指定要跟踪的文件类型,并提交 .gitattributes 文件。
之前用了 LFS 但推送还是报错超过 100MB 怎么办?
需要清除之前的 LFS 提交记录:使用 BFG 工具删除历史大文件(java -jar bfg.jar --delete-files '文件名' --no-blob-protection),然后执行 git reflog expire 和 git gc 清理,最后强制推送。
BFG 工具怎么用来删除 Git 历史中的大文件?
下载 bfg.jar,克隆仓库后执行 java -jar bfg.jar --delete-files '文件名' --no-blob-protection 强制删除指定文件,然后运行 git reflog expire --expire=now --all && git gc --prune=now --aggressive 进行垃圾回收。
强制推送前需要做什么设置?
需要在 GitHub 仓库设置中允许强制推送:进入 Setting → Branches → Add rules → 勾选 Allow force pushes,然后才能执行 git push -f origin master。
如何查找仓库中超过 100MB 的文件?
在仓库根目录执行 find . -type f -size +100M 命令,可以列出所有超过 100MB 的文件。