首页 文章

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

提问于
浏览
28

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

Details: 我公司最近开始在Bitbucket上托管git存储库 . 我负责的其中一个存储库大小约为973MB,这令人不安地接近1GB的软限制 . 为了减少回购规模,我按照Bitbucket文档文章_2630350中的说明,将大约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目录(这是我移动到新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

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 .

Questions

  • 为什么从回购中移出450MB文件只会减少我本地仓库的大小90MB?

  • 为什么即使是那种适度的减少也没有被推到Bitbucket上的远程仓库?

  • 地球上如何将远程仓库大小从973MB跳到2.3GB?

  • 如何解决?即使使用--force标志,我也无法推送到远程仓库 . 任何推送都会给我发错误消息"conq: repository is in read only mode (over 2 GB size limit). fatal: Could not read from remote repository."

3 回答

  • 27

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

    • 在Bitbucket上创建一个分支

    • 删除Bitbucket上的那个分支

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

  • 0

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

    • 为什么从回购中移出450MB文件只会减少我本地仓库的大小90MB?历史上的某些东西被遗漏了 . 我究竟不是什么,但filter-branch命令错过了什么 . 通过运行实用程序BFG Repo-Cleaner,我能够成功地将repo大小减少450MB .

    • 为什么即使是那种适度的减少也没有被推到Bitbucket上的远程仓库?它确实如此,但Bitbucket支持必须在他们身边运行git gc . 可以联系Bitbucket请求并要求他们在回购上运行git gc .

    • 地球上如何将远程仓库大小从973MB跳到2.3GB?未知 . Bitbucket技术支持也没有这个答案 .

    • 如何解决?联系Bitbucket支持 . 他们可以将存储库重新置于读写模式,这样您就可以推送一个较小的存储库,并且可以在它们的末尾运行git gc .

  • 24

    我相信那些熟悉的人已经知道了,但是git会存储你的文件版本历史记录,所以进行更改和推送文件不会减少你的回购邮件大小 .

    还有几种方法可以减少bitbucket,GitHub,gitlab等上的repo大小 . 最好的方法是删除分支,就像那样永久删除该分支记录的所有文件,只要它没有被另一个文件跟踪 . 但您可能需要该分支中的最新文件,因此请执行以下操作:

    • 在本地计算机上,创建一个重复的仓库 . (备份,所以你不会丢失信息)

    • 删除要移动的分支,或创建新版本的分支 . 您可以使用 --cached 删除远程分支 .

    • 如果要刷新分支,可以将文件复制到新分支并推送 .

    • 如果要创建新的远程仓库,也可以这样做 .

    根据主机的不同,您可能必须运行特殊命令,但这在大多数情况下都适用 .

相关问题