とある案件で、定期的にデータベースを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ぐらいまで削減できました。(どんだけ。。。)
まとめ
- まずはバックアップ
- 容量制限された場合だと、
git gc
したリポジトリをgit push
することができないので、まずはgit reset
で軽くなるまでコミットログを戻す git reset
したら、そのリポジトリでgit push --force
を実行- bitbucket側で、
git gc
が走り、容量が削減されて制限が解除されたら、バックアップ側でgit gc
してgit push
これでおk