我们今天遇到了同样的问题,并能够解决它,而无需联系Bitbucket支持,方法如下。请注意,该方法会丢弃存储库中的最后一个提交 - 因此您可能需要备份。
Bitbucket报告称我们的存储库约为2.1GB,而当克隆时,本地仅占用约250MB。因此,我们得出结论,最可能是由于不可访问提交中的大文件(感谢此答案)。
以下是在本地查看不可访问提交的方法,其中我们不考虑通过引用日志的可达性:
git fsck --unreachable --no-reflog
在本地,可以使用以下命令清除不可访问提交:
git reflog expire --expire-unreachable="now" --all
git prune --expire="now" -v
git gc --aggressive --prune="now"
然而,在Bitbucket上我们无法远程运行这些命令。但是,他们在关于减小代码库大小的页面(第三节去除代码库限制)中说,他们会在执行git reset --hard HEAD~1
(将丢弃最后一次提交)后立即运行git gc
,然后再紧跟着git push -f
。此外,在垃圾回收死数据部分中,他们还提到可以尝试以下步骤:git reflog expire --expire=now --all
、git gc --prune=now
和git push --all --force
。考虑到这些内容,我决定本地尝试以下步骤,希望能够去除reflog并在本地进行清理,随后将其推送到远程Bitbucket代码库,并开始进行gc:
git reflog expire --expire-unreachable="30m" --all
git prune --expire="30m" -v
git gc --prune="30m"
git reset --hard HEAD~1
git push -f
这个方法很有效,仓库大小立即从2.1GB降至大约250MB。:)
请注意,expire / expire-unreachable / prune的时间参数设置了从现在开始向前测量的过期截止点。例如,“now”表示过期/修剪所有内容,“30m”表示排除最近30分钟内的更改。