如何减少Bitbucket上的git回购规模?

如何减少Bitbucket上的git回购规模?,git,repository,bitbucket,Git,Repository,Bitbucket,我的问题摘要:我在Bitbucket上的一个私有存储库在我向两个现有文件添加了几百字节后,其大小突然增加了一倍多。回购协议现在超过2GB,这导致Bitbucket将其置于只读模式。因为它处于只读模式,所以我无法推动会减少回购规模的更改。(第22条) 详细信息:我的公司最近开始在Bitbucket上托管git存储库。我负责的一个存储库的大小约为973MB,令人不安地接近1GB的软限制。为了减少回购规模,我按照Bitbucket文档文章中的说明,将价值约450MB的文档和在线帮助文件移到了他们自己的

我的问题摘要:我在Bitbucket上的一个私有存储库在我向两个现有文件添加了几百字节后,其大小突然增加了一倍多。回购协议现在超过2GB,这导致Bitbucket将其置于只读模式。因为它处于只读模式,所以我无法推动会减少回购规模的更改。(第22条)

详细信息:我的公司最近开始在Bitbucket上托管git存储库。我负责的一个存储库的大小约为973MB,令人不安地接近1GB的软限制。为了减少回购规模,我按照Bitbucket文档文章中的说明,将价值约450MB的文档和在线帮助文件移到了他们自己的私有回购中。然后,我按照Bitbucket文档文章中的说明进行操作,特别是:

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

问题

  • 为什么将450MB的文件移出回购协议只会使本地回购协议的大小减少90MB
  • 为什么即使是适度的降价也没有被推到Bitbucket上的远程回购
  • 远程回购规模究竟是如何从973MB跃升到2.3GB的
  • 我怎么修理它?即使使用--force标志,我也无法推送到远程回购。任何推送都会向我显示错误消息“conq:repository处于只读模式(超过2GB大小限制)。 致命:无法从远程存储库读取。“

  • 在与Bitbucket技术支持部门协商后,我现在可以回答自己的一些问题:

  • 为什么将450MB的文件移出回购协议只会减少文件的大小 我的本地回购协议增加了90MB?历史上有些东西被遗漏了。我 不知道具体是什么,但filter branch命令遗漏了什么。 通过运行 实用程序
  • 为什么即使是适度的减持也没有被推到远程回购 在比特桶上?确实如此,但Bitbucket支持必须在上运行git gc 他们这边。您可以联系Bitbucket请求并要求他们运行 回购协议上的git gc
  • 远程回购规模究竟是如何从973MB跃升到2.3GB的? 不知道。Bitbucket技术支持对此没有答案 也有一个
  • 我怎么修理它?联系铲斗支架。他们可以放一个 将存储库恢复到读写模式,以便您可以推送较小的 他们可以在自己的终端上运行git gc

  • 我发现,如果超过2GB限制,降低Bitbucket回购规模的最简单方法是

  • 在Bitbucket上创建分支
  • 删除Bitbucket上的分支

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

    我相信熟悉它的人已经知道了,但是git会存储文件的版本历史记录,因此进行更改和推送文件不会减少repo的大小

    在bitbucket、GitHub、gitlab等上,仍然有几种方法可以减少回购规模。最好的方法是删除分支,因为这会永久删除该分支记录的任何文件,只要该文件没有被其他分支跟踪。但您可能需要该分支中的最新文件,因此请执行以下操作:

  • 在本地计算机上,创建重复的回购。(备份,以免丢失信息)
  • 删除要移动的分支,或创建其新版本。您可以使用
    --cached
    删除远程分支
  • 如果要刷新分支,可以将文件复制到新分支并推送
  • 如果您想创建新的远程回购,也可以这样做
  • 根据主机的不同,您可能需要运行特殊命令,但这在大多数情况下都会起作用。

    远程回购的大小究竟是如何从973MB跃升到2.3GB的? 这是bitbucket云端的已知错误,请参阅

    垃圾文件间歇性地计入存储库大小

    当推送到远程存储库时,随后会触发GC 这将生成一个垃圾文件。此垃圾文件在服务器上被清除 下一步是后续GC。在这两个GC之间是存储库的大小 在Bitbucket UI中错误地显示为垃圾文件大小 是间歇性co
    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"