Git 大文件推送失敗問題及解決方案
在日常開發中,我們經常會遇到這樣的問題:
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 等大文件被跟蹤?
很多時候,exe
、zip
、mp4
、訓練模型等大文件 根本不應該放在 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 倉庫空間,更加靈活)
四、總結
- 遇到 push 報錯提示大文件超 100MB,要用
git filter-repo
從歷史中徹底刪除。 - 操作步驟:新克隆倉庫 → 執行刪除命令 → 強制推送。
- 平時要提前配置好
.gitignore
,避免 exe、zip、模型文件等被誤提交。 - 一句話經驗:源代碼放 Git,大文件放 Release/網盤,二者分開管理,省心省力。