Git LFS 大文件清理
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_b0de6696/git-lfs-cleanup。
技能介绍
什么时候会用到
Push 或 clone 时若出现 lfs batch error、LFS only supported 一类报错,往往是大文件被 Git LFS 追踪,而远程(例如 Gitee 个人版、GitHub Free 某些场景)并不提供可用的 LFS 服务。模型权重(*.safetensors、*.bin、*.pt)、压缩包、.venv/、node_modules/ 或 Hugging Face / ModelScope 缓存一旦被 LFS 指针写进历史,仓库体积和 push 失败会一起找上门。
技能如何组织排查与修复
技能按固定顺序做诊断:先确认是否为 LFS 问题,再用 git lfs ls-files 看追踪列表(* 表示已上传的指针),并在工作区扫描超过 10MB 的文件;同时核对 .gitignore 与 .gitattributes 里的 track 规则是否把本不该进库的内容纳了进来。
处理上分两条路。方案 A(推荐):在 .gitignore 里只排除真正不需要版本控制的目录 → git rm --cached 从索引移除(不删本地文件)→ 清理 LFS 追踪 → 若 git lfs migrate export 因远程 LFS 不可用而失败,则用 git-filter-repo 从历史中彻底去掉大文件路径 → 重新添加 origin 并 force push。方案 B:若大文件尚未 push、也无需改历史,则 .gitignore + 取消暂存即可。
边界与协作成本
git-filter-repo 会重写全部历史,协作者通常需要重新 clone;git rm --cached 与 --invert-paths 不会删磁盘上的文件。若远程 LFS 正常,migrate export 可优先尝试以保留内容并取消 LFS 管理。另需注意:git lfs uninstall 后仍报错时要清 local/global 的 filter.lfs;filter-repo 的 --path 不能含空格;Windows 上偶现 unable to unlink 警告一般可忽略。
使用场景
- 向 Gitee 个人版 push 时出现 `lfs batch error`,需要取消 LFS 并从历史中移除已提交的模型权重
- 远程不支持 LFS,`git lfs migrate export` 下载指针失败,必须用 `git-filter-repo` 重写历史后才能再次 push
- 误将 `.venv/`、`node_modules/` 或 `huggingface_cache/` 纳入版本库,需从索引与历史中移除且保留本地文件
- 提交前用 `git lfs ls-files` 与目录扫描定位超过 10MB 的 `*.safetensors`、`*.bin`,并核对 `.gitattributes` 规则
适合人员
- 在 Gitee 个人版托管训练项目、却因 LFS 报错无法 push 的机器学习工程师
- 要把含 LFS 指针的仓库迁到不支持 LFS 的远程、并负责 shrink 历史的仓库维护者
- 因大文件与 LFS 导致 clone 极慢、需在 force push 前协调协作者重新 clone 的技术负责人
- 误提交压缩包或 ONNX 权重后、需按 SKILL 诊断流程区分「仅索引」与「需 filter-repo」的开发者