1. はじめに
忘れもしない 2025 年 5 月 30 日、いつものように Bitbucket の Git サーバーへコミット済みのソースコードをプッシュしようとしたところ、エラーになりました。
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks push -v origin feature/dev_hogehoge:feature/dev_hogehoge
POST git-receive-pack (476 bytes)
remote: This workspace is over the 1 GB size limit. Reduce the size of your workspace or upgrade to a Standard or Premium plan to increase the size limit.
remote:
remote: Upgrade to a Standard or Premium plan:https://www.atlassian.com/software/bitbucket/pricing
これまで見たことがないメッセージで、よく読んでみると
このワークスペースは 1 GB のサイズ制限を超えています。ワークスペースのサイズを小さくするか、スタンダードプランまたはプレミアムプランにアップグレードしてサイズ制限を増やしてください。
と書かれています。
たしか Bitbucket のワークスペースのサイズ上限は 4GB だったはず。
不思議に思い調べてみると、以下情報にたどり着きました。
「無料のワークスペースの合計ストレージ制限が 1 GB になるので、これらの制限を超えている場合は有料プランへのアップグレードを検討してね♪」
な、なんだってー!!
2. 状況確認
ワークスペースには 8 個のリポジトリがありましたが、そのうちの 1 つが単体ですでに 1GB のサイズを超えていました。
それ以外のリポジトリについてはそれほど大きなサイズのものはなかったので、問題の 1 つをかなり圧縮できれば、なんとか 1GB の枠に収まるかもしれません。
しかし、これからずっと 1GB の上限に怯えながら、この環境を使い続けるのはかなりのリスクです。
無料枠だから仕方がない部分もあるとはいえ、サイズ 4 分の 1 という極端な縮小に憤りも感じていましたので、この機会に他のサーバーへ引っ越すことにしました。
3. 引っ越し先
リポジトリサーバーは元々無料枠で使っていたので、今回も無料でいきたいと考えました。
時間があれば引っ越し先をじっくり検討するのですが、のんびりとできない状況だったので、メジャーな GitHub へ引っ越すことにしました。
4. 引っ越し開始
以下 1, 2 の手順をリポジトリの数だけ繰り返しました。
1. GitHub に空の移行先リポジトリを作成
GitHub では Organization を設定しました。
この Organization にリポジトリを新規作成します(リポジトリ名は移行元と同)。
※Organization については以下を参照してください。
※リポジトリの作成方法については以下を参照してください。
2. Bitbucket から移行元のリポジトリをクローンし、GitHub の移行先リポジトリにプッシュ
手順は、リポジトリをクローンしてプッシュするだけです。
cd C:\temp\bitbucket-clone
git clone --bare "https://(user)@bitbucket.org/(workspace)/hoge.git"
cd hoge.git
git push --mirror "https://(user)@github.com/(organization)/hoge.git"
(user)の箇所はリポジトリへのアクセスユーザー名が入ります。
また、(workspace)には Bitbucket のワークスペース名が、(organization)には GitHub の Organization名が入ります。
5. 問題発生で中断
想像以上にさくさく移行できたので
「こんなことなら早く引っ越しておけばよかったなー」
とお気楽気分で作業を進めていたのですが、最後に落とし穴が待っていました。
リポジトリ「hoge-largepj」(仮名)を GitHub にプッシュしたところ、以下のようなエラーが出て失敗しました。
remote: error: GH001: Large files detected. You may want to try Git Large File Storage —
https://git-lfs.github.com.
GitHub では 100MB を超えるファイルは登録できないようで、それで弾かれたようです。
しかし、リポジトリ配下には 100MB どころか 10MB を超えるファイルすらありませんでした。
見えるところに無いということは、見えないところ、つまり Git の操作履歴に有るのだろうと考えました。
6. 問題の対処
この際に、履歴から 10MB を超えるファイルを削除することにしました。
この処理には BFG Repo-Cleaner を使いました。
cd /d C:\temp\bitbucket-clone
java -jar C:\bfg\bfg.jar --strip-blobs-bigger-than 10M hoge-largepj.git
正常終了したら、実行結果のログに以下のメッセージが表示されていました。
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive
Git の操作履歴からゴミログを削除して、ガベージコレクションを行うコマンドのようです。
※これを実施しないとディスクサイズが圧縮されません。
cd hoge-largepj.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
| 作業前サイズ | 作業後サイズ |
|---|---|
| 339 MB | 162 MB |
半分のサイズに圧縮できました!
あとは GitHub にプッシュすれば OK です。
7. おわりに
このような作業は計画的に行いたいところですが、問題が起きなければ手を付けない気もします。
今回、GitHub へのプッシュでエラーになった時は焦りましたが、実は以前に Git の履歴から巨大ファイルを削除したことがあったので、その経験が活きました。