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

近乎空的Git仓库.git文件夹体积过大问题排查与解决

问题原因

你的仓库回滚到初始提交后,.git文件夹依然庞大的核心原因是:Git会永久保留所有历史提交的对象数据。之前提交过的大文件(比如Pods依赖、编译产物、大型资源等)虽然从当前分支的工作区消失了,但它们仍然存在于Git的对象数据库(.git/objects目录)中。Bitbucket的仓库容量统计包含整个Git仓库的所有历史对象,所以仅仅重置分支HEAD不会清理这些历史遗留的大对象,导致.git文件夹依然占绝大多数体积。

解决步骤

1. 定位历史中的大文件

先找出仓库里占据空间最大的历史文件,执行以下命令:

# 列出仓库中体积最大的20个对象及其对应文件路径
git rev-list --all --objects | grep -E "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -20 | awk '{print$1}')"

执行后会输出大文件的历史路径,比如Pods/目录或者单个大资源文件。

2. 彻底移除历史中的大文件

使用git filter-repo工具(比旧的git filter-branch更安全高效)彻底从所有历史提交中删除目标大文件:

  • 如果要删除整个Pods/目录:
git filter-repo --path Pods/ --invert-paths
  • 如果要删除单个大文件(比如LargeAsset.dmg):
git filter-repo --path LargeAsset.dmg --invert-paths

注意:如果本地没有git filter-repo,macOS可以通过brew install git-filter-repo安装,其他系统可通过对应包管理器或官方文档安装。

3. 清理本地Git缓存

执行以下命令彻底清理未被引用的历史对象,缩小.git文件夹:

git reflog expire --expire=now --all && git gc --prune=now --aggressive

4. 强制推送到远程仓库

Bitbucket默认可能禁止强制推送,需要先临时开启权限:

  • 登录Bitbucket仓库后台,进入「Settings」→「Branch permissions」
  • 找到当前主分支(比如main或master),临时允许「Force push」权限
  • 执行强制推送:
git push --force origin main  # 替换为你的分支名
  • 推送完成后,记得关闭分支的强制推送权限,避免误操作。

注意事项

  • 操作前务必备份本地仓库(复制整个仓库文件夹),防止数据丢失。
  • 如果有其他协作者,他们需要重新克隆仓库,因为仓库历史已被改写,本地旧仓库无法正常拉取更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:33:13