如何减少Bitbucket上的git repo大小?

dgv*_*vid 29 git repository bitbucket

我的问题总结:在我将两百个字节添加到两个现有文件之后,我在Bitbucket上的一个私有存储库的大小突然增加了一倍多.回购现在超过2GB,这使得Bitbucket将其置于只读模式.因为它处于只读模式,所以我无法推送会降低repo大小的更改.(Catch 22.)

详细信息:我公司最近开始在Bitbucket上托管git存储库.我负责的其中一个存储库大小约为973MB,这令人不安地接近1GB的软限制.为了减少repo大小,我按照Bitbucket文档文章中的说明将一个存储库分成两部分,并将大约450MB的文档和在线帮助文​​件移动到他们自己的私人仓库中.然后,我按照Bitbucket文档文章中的说明减少存储库大小维护一个git存储库,具体来说:

git count-objects -vH 给我看了一个大约973MB的大小包.

我跑去git filter-branch --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
Run Code Online (Sandbox Code Playgroud)

git count-objects -vH然后给我看了一个881.1 MiB的尺寸包,du -sh .git/objects返回882M.我感到失望的是,移动450MB以上的回购大小减少了不到90MB,但是仍然把改变推到了Bitbucket:

git push --all --force
git push --tags --force
Run Code Online (Sandbox Code Playgroud)

repo的Bitbucket副本的设置页面继续显示973MB的大小.我退出了,刷新了浏览器,重新登录,但没有帮助 - 回购大小保持在973MB.

今天早上(上述更改后三天),我对两个现有文件进行了一些小的补充,这些文件将文件大小增加了不到1KB,添加并提交给我的本地仓库,然后将更改推送到到位桶.几分钟后,我看了一下repb的Bitbucket页面,看到一条红色警告标语告诉我"这个repo超过了2 GB的限制,并且处于只读模式." 设置页面现在说repo的大小为2.3 GB.

根据Bitbucket的说法,在两个文件中添加几百个字节肯定是过去三天在远程仓库上发生的唯一活动.这种推动可能不是回购的原因,而是规模增加了一倍,但这两个事件在时间上密切相关.

git reflog show 没有回报.

将新副本克隆到备用目录,然后运行git count-objects给我一个881.29 MiB的大小包.

本地存储库位于CentOS 6.5系统上.git版本是1.8.5.3.

问题

  1. 为什么从回购中移出450MB的文件只会减少我本地回购的大小90MB?
  2. 为什么即使是那种适度的减少也没有被推到Bitbucket上的远程仓库?
  3. 如何在地球上远程回购大小从973MB跳到2.3GB?
  4. 我如何解决它?即使使用--force标志,我也无法推送到远程仓库.任何推送都会收到错误消息"conq:存储库处于只读模式(超过2 GB大小限制).致命:无法从远程存储库读取."

sli*_*cko 32

我发现,如果超过2GB限制,减少Bitbucket repo大小的最简单方法是

  1. 在Bitbucket上创建一个分支
  2. 删除Bitbucket上的那个分支

这应该触发Bitbucket git gc在repo 上运行.

  • 这仅在超过 2Gb 时才有效吗?因为我的速度是 1.5Gb,这个技巧不起作用。 (2认同)
  • 这对我不起作用。我的存储库是 2.1 GB,经过此过程后,它现在有 3.6 GB。我正在尝试这个 https://rtyley.github.io/bfg-repo-cleaner/ (2认同)
  • 2019 年,这对我有用。单击“创建”分支,将其删除,几分钟后我可以看到我的回购大小已减少。 (2认同)

dgv*_*vid 25

在获得Bitbucket技术支持后,我现在可以回答一些自己的问题:

  1. 为什么从回购中移出450MB的文件只会减少我本地回购的大小90MB?历史上的某些东西被遗漏了.我究竟不是什么,但filter-branch命令错过了什么.通过运行实用程序BFG Repo-Cleaner,我能够成功地将repo大小减少450MB .
  2. 为什么即使是那种适度的减少也没有被推到Bitbucket上的远程仓库?它确实如此,但Bitbucket支持必须在他们身边运行git gc.可以联系Bitbucket请求并要求他们在回购上运行git gc.
  3. 如何在地球上远程回购大小从973MB跳到2.3GB?未知.Bitbucket技术支持也没有这个答案.
  4. 我如何解决它?联系Bitbucket支持.他们可以将存储库重新置于读写模式,这样您就可以推送一个较小的存储库,并且可以在它们的末尾运行git gc.

  • 联系支持+1 - 我的经验基本相同. (8认同)
  • 第 4 点:还有一种联系支持的替代方法:[git reset --hard HEAD~1; git push -f](https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html#Reducerepositorysize-Removetherepositorylimitation) - 但**先备份**! (2认同)