如何减少Bitbucket上的git回购规模?
我的问题摘要:我在Bitbucket上的一个私有存储库在我向两个现有文件添加了几百字节后,其大小突然增加了一倍多。回购协议现在超过2GB,这导致Bitbucket将其置于只读模式。因为它处于只读模式,所以我无法推动会减少回购规模的更改。(第22条) 详细信息:我的公司最近开始在Bitbucket上托管git存储库。我负责的一个存储库的大小约为973MB,令人不安地接近1GB的软限制。为了减少回购规模,我按照Bitbucket文档文章中的说明,将价值约450MB的文档和在线帮助文件移到了他们自己的私有回购中。然后,我按照Bitbucket文档文章中的说明进行操作,特别是:如何减少Bitbucket上的git回购规模?,git,repository,bitbucket,Git,Repository,Bitbucket,我的问题摘要:我在Bitbucket上的一个私有存储库在我向两个现有文件添加了几百字节后,其大小突然增加了一倍多。回购协议现在超过2GB,这导致Bitbucket将其置于只读模式。因为它处于只读模式,所以我无法推动会减少回购规模的更改。(第22条) 详细信息:我的公司最近开始在Bitbucket上托管git存储库。我负责的一个存储库的大小约为973MB,令人不安地接近1GB的软限制。为了减少回购规模,我按照Bitbucket文档文章中的说明,将价值约450MB的文档和在线帮助文件移到了他们自己的
git count objects-vH
向我展示了一个大约973MB大小的包
我运行了git过滤器分支--index filter'git rm--cached--ignore unmatch doc'HEAD
来删除doc目录(这是我移动到新repo的内容)
我运行了以下命令来终止引用和删除:
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。几分钟后,我查看了回购的Bitbucket页面,看到一条红色警告横幅,通知我“此回购超过了2GB限制,处于只读模式。”设置页面现在显示回购的大小为2.3MB
Bitbucket表示,在过去三天中,向两个文件中添加几百个字节的推送显然是远程回购上发生的唯一活动。这种推动可能不是回购规模扩大一倍以上的原因,但这两个事件在时间上密切相关
git reflog show
不返回任何内容
将新副本克隆到备用目录中,然后运行git count对象,我得到了一个大小为881.29 MiB的包
本地存储库位于CentOS 6.5系统上。git版本是1.8.5.3
问题
在与Bitbucket技术支持部门协商后,我现在可以回答自己的一些问题:
我发现,如果超过2GB限制,降低Bitbucket回购规模的最简单方法是
这应该会触发Bitbucket在repo上运行
git gc
。我相信熟悉它的人已经知道了,但是git会存储文件的版本历史记录,因此进行更改和推送文件不会减少repo的大小
在bitbucket、GitHub、gitlab等上,仍然有几种方法可以减少回购规模。最好的方法是删除分支,因为这会永久删除该分支记录的任何文件,只要该文件没有被其他分支跟踪。但您可能需要该分支中的最新文件,因此请执行以下操作:
--cached
删除远程分支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"