You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bfg-repo-cleaner清理Bitbucket Server仓库成功,但克隆仍显示原大小

解决Bitbucket Server仓库清理后克隆仍为原大小的问题

我之前也碰到过一模一样的情况——用BFG把本地仓库清理到125MB,push成功后远程提交ID也更新了,但新克隆下来的仓库还是原来的700多MB。这主要是因为Bitbucket Server还留着旧Git对象的缓存,或者我们没彻底推送所有清理后的分支/标签,下面一步步来解决:

1. 确保本地清理彻底,强制推送所有分支和标签

BFG默认处理所有分支,但如果有未推送的标签、冷门分支,远程仓库里还会残留旧历史对象:

  • 先在本地把所有分支都过一遍,确保都完成清理:
    git branch -a | grep -v HEAD | grep -v master | xargs git checkout
    git reflog expire --expire=now --all
    git gc --prune=now --aggressive
    
  • 接着强制推送所有分支和标签到远程,覆盖旧历史:
    git push --force --all
    git push --force --tags
    

    提醒:强制推送会覆盖远程分支历史,一定要提前和团队成员同步,避免有人的本地代码和远程冲突。

2. 在Bitbucket Server手动触发Git垃圾回收

Bitbucket不会自动立刻清理未被引用的旧对象,需要手动触发仓库维护:

  • 登录Bitbucket Server进入你的仓库页面
  • 点击顶部的Settings(设置)标签
  • 左侧菜单找到Maintenance(维护)选项
  • 点击Start Git garbage collection(启动Git垃圾回收)按钮,等待执行完成

    这个过程可能需要几分钟,完成后Bitbucket会彻底删除所有没用的旧对象

3. 删除远程残留的旧备份引用(如果存在)

BFG清理时会创建refs/original/开头的引用用来备份旧历史,如果这些引用被推到了远程,会一直“占着”旧对象:

  • 先检查远程有没有这类引用:
    git ls-remote --refs origin refs/original/
    
  • 如果有输出,执行命令删除远程的这些引用(替换master为对应分支名):
    git push origin :refs/original/refs/heads/master
    

4. 验证并重新克隆

完成以上步骤后,等个几分钟让Bitbucket同步数据,再重新克隆仓库:

git clone <你的仓库URL>

这次克隆下来的仓库大小应该就和你本地清理后的125MB一致了。另外注意,Bitbucket页面上显示的仓库总大小可能有延迟,即使实际对象已经清理,页面数值可能需要刷新几次才会更新,但本地克隆的大小是准确的。

内容的提问来源于stack exchange,提问作者Vibhuti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:43:00