【Bitbucket】リポジトリのサイズを減らすメモ
Bitbucketのリポジトリは2GBでハード制限という制限がかかります。
一度2GBの制限を超えるとpushできなくなります。
そんな中、1GBを超えてしまいソフト制限がかかってしまいました。警告が表示されるだけですが、このままいくと2GBを超えてしまいそうなのでメンテナンスが必要です。
そこで今回、リポジトリサイズを減らして、Bitbuketにpushするまでをメモとして残しておきます。
公式にも手順は書いてあるので、合わせてみてみてください。
https://ja.confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html
リポジトリのサイズを減らす
バックアップをとっておく
何かあった時のために、ローカルにCloneしてバックアップをしておきます。
–mirror フラグを使ってCloneする
まず、–mirrorフラグを使ってCloneします。
$ git clone --mirror git://example.com/example.git
BFGをダウンロード
Bitbucketの公式に書いてある通り、BFG Repo-Cleanerを使って履歴の書き換えを行います。
まずはじめに、BFGをダウンロードしておきます。
コマンドでも、ブラウザからzipでもどちらでも。
BFG Repo-Cleane
https://rtyley.github.io/bfg-repo-cleaner/
ダウンロードしたらCloneしたリポジトリと同じ階層に入れておきます。
BFGによる履歴の書き換え
以前gitから外した画像を削除したかったので、「.jpg」と「.png」がつくファイルをごそっと削除します。
//jpgを削除
$ java -jar bfg-1.13.0.jar --delete-files *.jpg example.git
//.pngを削除
$ java -jar bfg-1.13.0.jar --delete-files *.png example.git
他のやり方はBFG Repo-Cleaneの公式にも書いてあります。
ただ、フォルダやファイルを消すときに、
パスの指定をするわけではないので、同じ名前のものは一緒に消えてしまうようです。
ガベージコレクト
Gitのガベージコレクトを実行します。
cd example.gi
git reflog expire --expire=now --all && git gc --prune=now --aggressive
サイズを確認する
pushをする前に、サイズが減っているか確認します。
git count-objects -v
size-packの値がリモートサーバーにpushされた時のサイズで、単位はキロバイトです。
pushする
さて、無事サイズが減ったことを確認したので、Bitbucketにpushします。
git push --force
ウェブブラウザ(Bitbucket)でサイズを確認
Bitbucket上でサイズが減っていたらこれで完了です。
Bitbucketにpushできないとき
いざpushする時に、権限がないと怒られました。
Bitbucketのアクセスキーはリポジトリごとと、アカウントごとに登録ができ、
リポジトリにしか登録していないと、今回のような時にはpushできないようです。
アカウントの「設定」ページにも「SSH 鍵」とう項目がありますので、そこで鍵を追加すればOKです。
Bitbucket(ブラウザ)上でサイズが変わらないとき
push後60分経ってもBitbucket上でサイズが変わらない時、はサポートに連絡してみましょう。日本語サポートもありました。
今回悩みに悩んだのが、Gitの履歴を書き換えてpushしてもブラウザ上でサイズを確認すると減らないどころか、増えていることでした。
はじめ1.5GBだったのがpush後1.9BGに増えてしまい、
もう2GB目前です…。
もう一度公式ページを読んでいると、こんな注意書きが。
If you’ve reduced the repository size locally and made a force push and still have a limitation after 60 minutes, you can contact support to run a
https://ja.confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.htmlgit gc
on the server for you.
強制的にpushしても60分後に制限ある時はサポートに連絡してという内容のようです。
再度Cloneしてサイズが減っていることを確認したあと、サポートに連絡しました。
割とすぐ返事をいただくことができ、git gc をして頂いたところ無事Bitbucket上でも1GBを下回ったことを確認できました。
最後に
結果無事メンテナンスできましたが、Bitbucket上でサイズが減らなかったことで、このやり方であっているのかというのが断言できない状態です。
ただ、ローカルでサイズを確認した限り履歴の書き換えはできていたので、メモとして残しておきます。
修正があれば編集する予定です。