我的问题摘要:在我将两百个字节添加到两个现有文件之后,我在Bitbucket上的一个私有存储库的大小突然增加了一倍多。回购现在超过2GB,这使得Bitbucket将其置于只读模式。因为它处于只读模式,所以我无法推送会降低repo大小的更改。 (赶上22。)
详细信息:我公司最近开始在Bitbucket上托管git存储库。我负责的其中一个存储库大小约为973MB,这令人不安地接近1GB的软限制。为了减少回购规模,我按照Bitbucket文档文章Split a repository in two中的说明操作,并将大约450MB的文档和在线帮助文件移到他们自己的私人仓库中。然后,我按照Bitbucket文档文章Reduce repository size和Maintaining a git repository中的说明进行操作,具体为:
git count-objects -vH
向我展示了大约973MB的大小。
我运行git filter-branch --index-filter 'git rm --cached --ignore-unmatch doc' HEAD
删除了doc目录(这是我移动到新仓库的内容)。
我运行以下命令以使参考和修剪失效:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
git count-objects -vH
然后向我展示了881.1 MiB的尺寸包,du -sh .git/objects
返回了882M。我感到失望的是,移动450MB以上的回购大小减少了不到90MB,但不过将这些变化推到了Bitbucket:
git push --all --force
git push --tags --force
回购的Bitbucket副本的设置页面继续显示973MB的大小。我退出了,刷新了浏览器,重新登录,但没有帮助 - 回购邮件大小保持在973MB。
今天早上(上述更改后三天),我对两个现有文件做了一些小的补充,增加了文件的数量。大小总共小于1KB,添加并提交给我的本地仓库,然后将更改推送到Bitbucket。几分钟后,我看了一下repb的Bitbucket页面,看到一条红色的警告横幅通知我"这个回购超过了2 GB的限制并处于只读模式。"设置页面现在说repo的大小为2.3 GB。
根据Bitbucket的说法,推送几百个字节添加到两个文件肯定是过去三天在远程仓库上发生的唯一活动。这种推动可能不会导致回购的原因增加一倍以上,但这两个事件在时间上密切相关。 git reflog show
什么都不返回。
将新副本克隆到备用目录中,然后运行git count-objects给我一个881.29 MiB的大小包。
本地存储库位于CentOS 6.5系统上。 git版本是1.8.5.3。
问题
答案 0 :(得分:28)
我发现,如果超过2GB限制
,减少Bitbucket仓库大小的最简单方法是这应该触发Bitbucket在repo上运行git gc
。
答案 1 :(得分:24)
在获得Bitbucket技术支持后,我现在可以回答一些自己的问题:
答案 2 :(得分:2)
这是比特桶云方面的已知错误,请参见BCLOUD-19794。
垃圾文件间歇地计入存储库大小。
当推送到远程存储库时,随后会触发GC 生成垃圾文件。此垃圾文件已在 下一个后续GC。在这两个GC之间,存储库的大小 在Bitbucket UI中作为垃圾文件大小错误显示 会间歇性地计入存储库的总大小。
如解决方法部分所述,您需要联系bitbucket才能手动运行GC。
如果有足够的人投票,Bitbucket可能会早日采取行动,而不是晚些时候采取行动。
答案 3 :(得分:1)
首先使用以下命令检查本地存储库的大小:-
git count-objects -Hv
我们可以使用以下命令
git reflog expire --expire="1 hour" --all
git reflog expire --expire-unreachable="1 hour" --all
git prune --expire="1 hour" -v
git gc --aggressive --prune="1 hour"
现在,再次使用命令git count-objects -Hv
注意存储库大小和垃圾的更改
答案 4 :(得分:0)
我敢肯定那些熟悉的人已经知道了,但是git会存储文件的版本历史记录,因此进行更改和推送文件不会减小您的repo大小。
仍有多种方法可以减小bitbucket,GitHub,gitlab等上的repo大小。最好的方法是删除分支,因为只要该分支未跟踪该文件,该文件将永久删除该分支记录的所有文件。另一个。但是您可能想要该分支中的最新文件,所以请执行以下操作:
--cached
删除远程分支。取决于主机,您可能必须运行特殊命令,但这在大多数情况下应该可行。