ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Bitbucketでgitの容量が大きすぎと怒られたので容量削減した

スポンサードリンク

とある案件で、定期的にデータベースをsqlにエクスポートして、gitで管理し、そのバックアップ先をbitbucketにしている。

久々に確認しようかなと画面みたら、「このリポジトリは1GBを超えています」みたいな注意書きが。

で、下記URLを案内してもらったので、色々試す。

リポジトリ サイズの縮小 - アトラシアン製品ドキュメント

やったこと

git gcでメンテナンス

$ git gc

んで、git push

$ git push origin master
...
remote: repository is in read only mode (over 2 GB size limit).
remote:
remote: Learn how to reduce your repository size: https://confluence.atlassian.com/x/xgMvEw.
To git@bitbucket.org:xxxx/database.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@bitbucket.org:xxxx/database.git'

・・・できない(´・ω・`)

bitbucketの手順に従う

↑で貼り付けていた、これ↓のこと

リポジトリ サイズの縮小 - アトラシアン製品ドキュメント

この手順によって、リポジトリからプッシュ制限を削除できます。

なるほど。まずは制限を解除するために、容量削除しろ。ってのを先にやらないといけないらしい。参考にして試す。

まずバックアップ。

$ cd ../
$ cp git_repository/ _bk_git_repository/

自分の場合は、毎日バックアップをとっていたので、去年の10月ぐらいまで戻りました。

$ git reset --hard ${戻したいところまでのリビジョン番号}

戻したら、強制する必要があるので、git push --force

$ git push -force orign master

初のgit push --force。手が震える…

これで、bitbucket側がgit gcを走らせるらしいので、そのあと容量が問題なければ、容量制限が解除されるとのこと。

ヘルプには30分から1時間と書いてありましたが、5分ほどで解除されました。

バックアップ側をgit gcして、歴史をもとに戻す

次のステップとして、容量が増大した原因を探すとか、プロジェクトを分けるとかありますが、自分の場合は単純にgit gcのしなさすぎだったので、さっきバックアップとっていたgitリポジトリを、git gcして、リモートへgit pushします。

$ cd ../_bk_git_repository/
$ git gc
$ git push origin master

2GB => 68.5MBぐらいまで削減できました。(どんだけ。。。)

まとめ

  1. まずはバックアップ
  2. 容量制限された場合だと、git gcしたリポジトリgit pushすることができないので、まずはgit resetで軽くなるまでコミットログを戻す
  3. git resetしたら、そのリポジトリgit push --forceを実行
  4. bitbucket側で、git gcが走り、容量が削減されて制限が解除されたら、バックアップ側でgit gcしてgit push

これでおk

参考

qiita.com

リポジトリ サイズの縮小 - アトラシアン製品ドキュメント