Git推送大文件失败 超出GitHub100MB单文件限制报错解决
问题根因
你的判断准确,报错明确显示src/assets/videos/introduction.mp4文件大小为107.64MB,超出GitHub单文件100MB的上传硬限制,远端预接收钩子直接拦截了本次推送。
解决方案
根据你是否需要将该视频纳入仓库版本管理,二选一操作即可:
方案1:需要保留仓库内的视频文件,使用Git LFS管理大文件
Git LFS会将大文件存储在独立的文件存储服务,Git仓库内仅保留体积极小的指针文件,不会触发大小限制,操作步骤:
- 安装Git LFS工具后,进入本地仓库根目录执行初始化命令:
git lfs install - 配置LFS追踪所有mp4格式文件:
git lfs track "*.mp4" - 提交生成的
.gitattributes规则文件到仓库:
git add .gitattributes git commit -m "chore: use lfs track mp4 files"
- 如果你之前已经把该大视频提交到了本地提交历史,执行命令将其从普通Git存储迁移到LFS:
git lfs migrate import --include="src/assets/videos/introduction.mp4" - 重新执行推送命令即可完成上传:
git push --set-upstream origin my-branch
方案2:不需要将视频纳入Git版本管理,移除大文件并配置忽略
如果该视频属于临时素材、构建产物或不需要做版本追踪的内容,直接将其从Git提交记录中移除,配置忽略规则避免后续误提交即可,操作步骤:
- 执行命令将大文件从Git暂存区/提交历史中移除:
git rm --cached src/assets/videos/introduction.mp4 - 打开仓库根目录的
.gitignore文件,添加忽略规则,避免后续视频文件被误加入提交:src/assets/videos/*.mp4 - 如果大文件仅存在于最近一次未推送的提交中,执行命令修改最近一次提交即可:
git add .gitignore git commit --amend --no-edit
如果大文件存在于更早的多次本地提交中,执行命令清理整个分支历史里的大文件引用:git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch src/assets/videos/introduction.mp4' --prune-empty --tag-name-filter cat -- --all
- 执行命令清理本地缓存的冗余大文件对象:
rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now --aggressive
- 重新执行推送命令即可:
git push --set-upstream origin my-branch
注意:如果是多人协作的公共分支,清理提交历史后需要通知所有协作者重新拉取最新分支,避免本地留存的旧提交历史把大文件再次推送至远端。
内容的提问来源于stack exchange,提问作者Thi Nguyen
相关产品推荐
相关产品推荐

