Git大文件推送失败问题及解决方案

 更新时间:2025年09月22日 09:06:30   作者:code bean  
这篇文章主要介绍了如何解决Git大文件推送失败问题,建议使用gitfilter-repo彻底删除历史文件,配合.gitignore避免跟踪,推荐将大文件存于Release/网盘,实现代码与大文件分离管理,需要的朋友可以参考下

问题

在日常开发中,我们经常会遇到这样的问题:

Remote: File [xxx.exe] size 188.156MB, exceeds quota 100MB
Remote: Please remove the file[s] from history and try again

这是因为 Gitee/GitHub 等平台对单个文件大小有限制(一般是 100MB)。一旦提交了超过限制的大文件,push 就会被拒绝。

本文以我遇到的一个 exe 安装包 被错误提交进 Git 仓库为例,分享一下完整的解决思路。

一、为什么不能直接删除文件?

很多同学第一反应是直接删除项目里的 exe 文件,然后再提交一次。
但是问题在于:

  • 大文件已经存在于 Git 历史中
  • 即使最新提交删除了它,push 时远程仍然会检测到它的历史,依然报错

所以必须 从历史中彻底移除 这个文件。

二、用 git filter-repo 删除大文件

git filter-repo 是官方推荐的替代工具,比 filter-branch 更快更简单。

1. 安装

pip install git-filter-repo

2. 在干净仓库中操作

⚠️ 注意:git filter-repo 会修改整个提交历史。为了安全,最好新克隆一份仓库来操作:

git clone https://gitee.com/xxx/your-repo.git clean-repo
cd clean-repo

3. 删除大文件

例如删除 YoloAndHalcon/MainPro/发布/屏蔽盖SetupV1.0.exe

git filter-repo --path YoloAndHalcon/MainPro/发布/屏蔽盖SetupV1.0.exe --invert-paths

这会把该文件从整个历史中移除。

4. 强制推送

git push origin --force

完成后,大文件就不再存在于远程仓库了。

三、如何避免 exe 等大文件被跟踪?

很多时候,exezipmp4、训练模型等大文件 根本不应该放在 Git 仓库里

1. 使用 .gitignore

在项目根目录添加 .gitignore

# 忽略编译生成的二进制文件
*.exe
*.dll
*.so
*.dylib

# 忽略压缩包
*.zip
*.rar
*.7z
*.tar
*.gz

# 忽略大数据文件
*.csv
*.json
*.xlsx
*.db

# 忽略图片和视频(按需开启)
*.mp4
*.avi
*.mov
*.jpg
*.png

# 忽略机器学习模型
*.pt
*.onnx
*.h5
*.ckpt
*.pb

提交后,这些文件就不会再被 Git 跟踪。

2. 如果必须保存大文件

如果确实需要(比如模型文件、视频数据),推荐两种方式:

  • Git LFS(适合版本控制大文件,但 Gitee 免费版只有 1GB 限额)
  • Release 附件 / 网盘 / OSS(不占用 Git 仓库空间,更加灵活)

四、总结

  1. 遇到 push 报错提示大文件超 100MB,要用 git filter-repo 从历史中彻底删除。
  2. 操作步骤:新克隆仓库 → 执行删除命令 → 强制推送。
  3. 平时要提前配置好 .gitignore,避免 exe、zip、模型文件等被误提交。
  4. 一句话经验:源代码放 Git,大文件放 Release/网盘,二者分开管理,省心省力。

到此这篇关于Git大文件推送失败问题及解决方案的文章就介绍到这了,更多相关Git大文件推送失败内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 永恒之蓝实战教程之Mac通过Metasploit攻击Server2008的详细过程

    永恒之蓝实战教程之Mac通过Metasploit攻击Server2008的详细过程

    这篇文章主要介绍了永恒之蓝实战教程 Mac通过Metasploit攻击Server2008,首先准备一个Server2008,主要功能是使网络上的机器能够共享计算机文件、打印机、串行端口和通讯等资源,需要的朋友可以参考下
    2022-08-08
  • Git中smart Checkout与force checkout的区别及说明

    Git中smart Checkout与force checkout的区别及说明

    这篇文章主要介绍了Git中smart Checkout与force checkout的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • git ssh 配置多个账户的方法

    git ssh 配置多个账户的方法

    这篇文章主要介绍了git ssh 配置多个账户的方法,需要的朋友可以参考下
    2017-10-10
  • 基于IntelliJ IDEA/Android Studio插件开发指南(推荐)

    基于IntelliJ IDEA/Android Studio插件开发指南(推荐)

    Android Studio是基于Intellij IDEA开发的,所以开发Android Studio的插件,其实就是开发IDEA的插件。根据官方推荐,使用IDEA IDE来开发IDEA插件,本文给大家介绍插件开发的基本流程,感兴趣的朋友一起看看吧
    2021-10-10
  • yum的基本用法和实例(推荐)

    yum的基本用法和实例(推荐)

    这篇文章主要介绍了Linux(centos8)下的yum的基本用法和实例,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Git配置之设置用户名(user.name)和邮箱(user.email)方式

    Git配置之设置用户名(user.name)和邮箱(user.email)方式

    文章介绍了如何在Git中配置全局用户名和邮箱,以确保所有仓库使用统一的配置,配置命令包括设置全局用户名和邮箱,并通过查询配置来验证设置是否成功
    2026-02-02
  • Git上有更新而本地无更新时的解决过程

    Git上有更新而本地无更新时的解决过程

    文章解决分支名不匹配导致的推送冲突问题,建议先拉取远程更新,手动解决冲突并提交,若需强制推送需谨慎,可能覆盖远程内容
    2025-09-09
  • 架构思维之缓存雪崩的灾难复盘

    架构思维之缓存雪崩的灾难复盘

    这篇文章主要介绍了架构思维中一次缓存雪崩的灾难复盘真实案例的分享,希望可以对大家在工作中有所启发,祝大家多多进步早日升职加薪
    2022-01-01
  • Git提交代码详细流程及问题总结

    Git提交代码详细流程及问题总结

    这篇文章主要介绍了Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下
    2025-02-02
  • GIT合并分支的三种实现方式

    GIT合并分支的三种实现方式

    这篇文章主要介绍了GIT合并分支的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-03-03

最新评论