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

时间:2014-06-30 14:58:47

标签: git repository bitbucket

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

详细信息:我公司最近开始在Bitbucket上托管git存储库。我负责的其中一个存储库大小约为973MB,这令人不安地接近1GB的软限制。为了减少回购规模,我按照Bitbucket文档文章Split a repository in two中的说明操作,并将大约450MB的文档和在线帮助文​​件移到他们自己的私人仓库中。然后,我按照Bitbucket文档文章Reduce repository sizeMaintaining 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。

问题

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

5 个答案:

答案 0 :(得分:28)

我发现,如果超过2GB限制

,减少Bitbucket仓库大小的最简单方法是

  1. 在Bitbucket上创建分支
  2. 删除Bitbucket上的该分支
  3. 这应该触发Bitbucket在repo上运行git gc

答案 1 :(得分:24)

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

  1. 为什么从回购中移出450MB文件只会减小尺寸 我的本地回购90MB?历史上的某些东西被遗漏了。一世 不完全是什么,但filter-branch命令错过了什么。 我通过运行成功地将回购大小减少了450MB 实用程序BFG Repo-Cleaner
  2. 为什么即使是那种适度的减少也不会被推到远程仓库 在Bitbucket?确实如此,但Bitbucket支持必须运行git gc 他们的一面。可以联系Bitbucket请求并要求他们运行 回购时git gc。
  3. 如何在地球上远程回购大小从973MB跳到2.3GB? 未知。 Bitbucket的技术支持没有得到答案 一个。或者。
  4. 我该如何解决?联系Bitbucket支持。他们可以放一个 存储库回到读写模式,以便您可以推送更小的 存储库,他们可以在他们的最后运行git gc。

答案 2 :(得分:2)

地球上的远程存储库大小如何从973MB跃升到2.3GB?

这是比特桶云方面的已知错误,请参见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大小。最好的方法是删除分支,因为只要该分支未跟踪该文件,该文件将永久删除该分支记录的所有文件。另一个。但是您可能想要该分支中的最新文件,所以请执行以下操作:

  1. 在本地计算机上,创建重复的存储库。 (备份,因此您不会丢失信息)
  2. 删除要移动的分支,或创建其新版本。您可以使用--cached删除远程分支。
  3. 如果要刷新分支,可以将文件复制到新分支并推送。
  4. 如果您要创建新的远程仓库,也可以这样做。

取决于主机,您可能必须运行特殊命令,但这在大多数情况下应该可行。