GitLab仓库显示大小远大于本地文件总和,如何删除隐藏的冗余文件?
解决GitLab仓库历史冗余大文件清理方案
前置注意事项
- 操作前请完整备份本地和远程仓库,避免历史提交丢失
- 提前通知所有协同开发者,清理完成后必须删除原有本地仓库,重新克隆更新后的远程仓库,禁止从旧本地仓库直接推送内容,否则会将旧的冗余历史重新同步到远程
原因说明
你执行普通git rm不生效的核心原因是:sound-controller.rar并未存在于当前最新提交的工作区中,而是保存在更早的历史提交的Git对象里,常规文件操作命令无法修改历史提交记录,因此无法彻底删除该文件。
操作步骤
1. 本地清理历史提交中的冗余文件
推荐使用Git官方推荐的git filter-repo工具完成历史改写,操作命令如下:
# 进入本地仓库根目录后执行 git filter-repo --path sound-controller.rar --invert-path
该命令会遍历仓库所有提交历史,完全删除所有提交中出现过的sound-controller.rar文件。
如果你更习惯使用BFG Repo-Cleaner工具,也可以执行如下操作:
# 运行BFG删除指定大文件 java -jar bfg.jar --delete-files sound-controller.rar ./ # 清理本地残留的无效Git对象 git reflog expire --expire=now --all && git gc --prune=now --aggressive
2. 强制推送修改后的历史到GitLab
推送前需要先进入GitLab对应仓库的设置页面,临时关闭对应分支的「保护分支」规则,否则强制推送会被系统拦截,之后执行推送命令:
# 推送所有分支的修改后历史 git push origin --force --all # 如需同步清理标签的历史,额外执行 git push origin --force --tags
推送完成后可以恢复之前的保护分支规则。
3. 触发GitLab远程存储空间回收
GitLab默认不会自动清理已删除的历史对象,需要手动触发回收:
- 进入GitLab仓库「设置」-「通用」-「高级」设置页面
- 找到「清理仓库存储」选项,点击触发清理操作
等待5-10分钟后,GitLab页面的存储空间统计就会更新为正确值。
验证效果
清理完成后重新克隆该仓库,可确认克隆大小已恢复为1MB左右,且所有历史提交中均不存在sound-controller.rar文件。
内容的提问来源于stack exchange,提问作者petro.engine
相关产品推荐
相关产品推荐

