误推大文件至BitBucket仓库后本地.git文件夹过大求助
解决本地Git仓库.git文件夹过大的问题
这种情况我之前处理过好几次——远程仓库已经清理了大文件,但本地仓库的历史记录还保留着那些大文件的快照,所以.git文件夹才会一直占着1.5GB的空间。下面是一步步的解决方法,亲测有效:
第一步:定位仓库里的大文件
先确认那些体积庞大的pickle文件是不是还留在本地历史里,执行这个命令可以找出仓库中最大的10个对象对应的文件:git rev-list --all --objects | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print $1}')"运行后应该能看到那两个pickle文件的路径,确认它们就是罪魁祸首。
第二步:移除历史中的大文件
推荐用git filter-repo工具来清理历史(比老旧的git filter-branch更安全、高效)。如果你的Git版本>=2.22.0,可能已经自带了;如果没有,需要先安装(比如Linux用apt install git-filter-repo,macOS用brew install git-filter-repo)。
针对那两个pickle文件,分别执行:git filter-repo --path path/to/your/first.pickle --invert-paths git filter-repo --path path/to/your/second.pickle --invert-paths替换成实际的文件路径,这个命令会重写整个仓库历史,把所有提交里的这两个文件都移除。
第三步:清理本地冗余对象
执行下面的命令彻底清理掉本地仓库中未被引用的对象和过期日志,压缩仓库体积:git reflog expire --expire=now --all && git gc --prune=now --aggressive等命令跑完,你再看.git文件夹的大小,应该会明显缩小。
第四步:同步到远程仓库
因为我们重写了本地历史,需要强制推送到远程来覆盖旧的历史:git push --force⚠️ 注意:这个操作会修改远程仓库的历史,一定要提前跟团队里的其他成员沟通,让他们重新克隆仓库或者执行
git pull --rebase来同步,避免出现冲突。
后续预防措施
- 把不需要提交的pickle文件添加到
.gitignore里,防止误提交; - 如果确实需要提交大文件,用Git LFS(Large File Storage)来管理,它会把大文件存在单独的存储里,仓库里只存指针,不会让仓库体积暴增。
内容的提问来源于stack exchange,提问作者Lior Magen
相关产品推荐
相关产品推荐

