Git LFS超出1GB存储限额后,如何撤销其对大文件的追踪?
别担心,我带你一步步搞定这个问题——既能把大文件改成仅本地存储,又能恢复正常推送代码,完全不用购买存储套餐。
步骤1:确认当前被Git-LFS追踪的文件
首先,先搞清楚哪些文件在占用LFS配额,运行以下命令列出所有LFS管理的文件:git lfs ls-files你会看到所有被LFS追踪的文件路径,接下来就针对这些文件操作。
步骤2:停止追踪指定大文件
用git lfs untrack命令停止追踪单个或批量文件:- 单个文件:
git lfs untrack "path/to/your/large/file.zip" - 批量文件(比如所有
.zip格式大文件):git lfs untrack "*.zip"
这个命令会自动修改仓库里的
.gitattributes文件,移除对应的LFS追踪规则。- 单个文件:
步骤3:从Git索引中移除LFS文件记录(保留本地文件)
接下来要把这些文件从Git的索引中移除,但本地文件会完整保留,运行:- 单个文件:
git rm --cached "path/to/your/large/file.zip" - 批量文件:
git rm --cached "*.zip"
--cached参数是关键,它只操作Git仓库的索引,不会删除你本地的文件。- 单个文件:
步骤4:检查并更新
.gitattributes
虽然git lfs untrack已经自动修改了.gitattributes,但最好手动检查一下,确保里面没有残留的LFS规则。比如原来类似这样的行:*.zip filter=lfs diff=lfs merge=lfs -text如果还有,直接删除对应的行就行,然后保存文件。
步骤5:提交更改
把刚才的操作提交到版本历史:git add .gitattributes git commit -m "停止用Git-LFS追踪大文件,转为本地存储"步骤6:(可选但关键)清理历史中的LFS文件(解决旧提交占用配额问题)
如果之前已经有提交用LFS追踪了这些大文件,那仓库的历史记录里还保留着LFS的关联信息,推送时还是会触发配额检查。这时候需要重写仓库历史,移除所有LFS相关的追踪记录:首先确保你安装了
git filter-repo(如果没装,用包管理器安装即可,比如brew install git-filter-repo或sudo apt install git-filter-repo),然后运行:- 移除单个文件的历史追踪:
git filter-repo --path "path/to/your/large/file.zip" --invert-paths - 移除所有LFS追踪的文件历史:
git filter-repo --replace-text <(echo 'regex:filter=lfs.* ==> ')
⚠️ 注意:重写历史会改变仓库的提交哈希,如果是多人协作的仓库,一定要通知所有协作者重新克隆仓库,避免冲突。如果是你个人的仓库,放心操作就行。
- 移除单个文件的历史追踪:
步骤7:正常推送代码
最后,推送你的更改:git push origin <你的分支名>这时候就不会再触发Git-LFS的上传请求,也不会收到配额超限的提示了。
内容的提问来源于stack exchange,提问作者conor

