GitHub Git LFS历史清理后配额未降,如何彻底移除旧对象?
GitHub Git LFS配额未随仓库历史清理下降的解决方法
清理仓库Git历史中的Git LFS大文件后,本地仓库大小已降至70MB,但GitHub端的Git LFS存储配额仍显示1.35GB(与已清除的大文件大小一致),即使.gitattributes中已无相关记录,配额也未更新。
核心原因
GitHub的Git LFS对象是独立于Git仓库历史存储的,不会因为Git提交历史被清理而自动删除。只有当LFS对象在30天内未被任何分支、标签或提交引用时,GitHub才会自动清理;若需要立即释放配额,需手动删除未被引用的LFS对象。
补充操作步骤
1. 确认本地无残留LFS对象引用
先确保本地仓库已彻底清除所有对目标LFS文件的引用:
# 列出本地所有LFS对象(包括历史中的) git lfs ls-files --all # 检查历史中是否还有目标文件的记录 git log --all --grep="目标文件名"
2. 手动删除GitHub端未被引用的LFS对象
单对象删除(使用GitHub CLI)
先获取目标LFS对象的OID(可通过git lfs ls-files --all查看),然后执行:
gh api -X DELETE repos/{组织/用户名}/{仓库名}/git/lfs/objects/{OID}
替换{组织/用户名}、{仓库名}和{OID}为实际值。
批量删除(可选)
如果需要批量删除所有未被引用的LFS对象,可先获取所有未被引用的OID列表,再循环删除:
# 获取所有未被引用的LFS对象OID(需GitHub CLI和jq工具) gh api repos/{组织/用户名}/{仓库名}/git/lfs/objects/unreferenced | jq -r '.[] | .oid' | while read oid; do gh api -X DELETE repos/{组织/用户名}/{仓库名}/git/lfs/objects/$oid done
注意:该操作不可逆,执行前务必确认所有对象均已无引用。
3. 等待配额更新
删除操作完成后,GitHub的存储配额可能需要1-24小时才能更新,无需手动刷新页面等待。
额外注意事项
- 强制推送清理后的仓库历史后,需通知所有协作者重新克隆仓库,避免旧的本地历史再次推送导致LFS对象被重新引用。
- 操作GitHub API或CLI需要仓库的管理员权限,若为组织仓库,需确保账号拥有对应权限。
- GitHub自动清理未被引用的LFS对象有30天冷却期,若对象仍在冷却期内,必须手动删除才能立即释放配额。
内容的提问来源于stack exchange,提问作者servoz
相关产品推荐
相关产品推荐

