昨日Atlassianからこんなメールが届きました。
4f10f309

自分が作ったソースはBitbucketで管理していて、Atlassianはその運営会社です。ソース管理はGitHubがポピュラーですが、以前はGitHubは、無料ではソースをprivateな領域に置けなかったのに対し、Bitbucketは最初からprivateな領域に無料で置けたのと、無料プランでも置くファイルのサイズに制限がなかった(リポジトリあたり最大4GB)のでBitbucketを選んだのですが、料金体系が変わって、リポジトリを置くワークスペースあたり1GB、無料プランは1アカウントあたり作れるワークスペースはひとつなので、最大1GBに制限がついてしまったようです。
で、4/28までにどうにかしないと、そのワークスペースはリードオンリーになる、とのこと。

今のワークスペースのサイズを調べると、4GBくらい使っていました。どげんかせんといかん、ということで、ワークスペースをダイエットします。

まずはもう要らないリポジトリを消して3.5GBくらいまで削減。で、次にデータの多いリポジトリを調べると、StarsPhotoとその無料版、StarsPhotoLiteでした。もうアップデートはしないアプリですが、自分では使っているのでソースは消せません。ということで、これらのリポジトリを小さくします。
今のStarsPhotoのリポジトリのサイズは950MB。コレだけでほぼ使い切っています。
スクリーンショット 2025-03-29 133737


どうしようかな、とググっていたら見つけたのがこの方法。BFGというツールを使って、リポジトリにある大きなファイルを削除します。gitは履歴を関しているので、大きなファイルを消すだけではリポジトリは小さくならなくて、ファイルを消してからコレまでのコミットを全部書き換える必要があります。ここらへんを全部やってくれるツールです。



この記事に従って大きなファイルを消していきます。まずはこのサイトからBFGをダウンロードします。
で、次にremoteのリポジトリを --mirrorオプションで丸ごとクローンします。
git clone --mirror https://xxxxx@bitbucket.org/xxxxx/teleskymapbt3.git
クローンしたフォルダを見ると、たしかにでかい。
スクリーンショット 2025-03-29 110655


誤った処理をしても戻せるようにクローンしたのをさらにバックアップして、このリポジトリを小さくしていきます。ダウンロードしたBGFのjavaファイルをこのリポジトリと同じ階層に置きます。

で次のコマンドを実行。ここでは90MBより大きなファイルを削除します。
java -jar bfg-1.15.0.jar --strip-blobs-bigger-than 90M teleskymapbt3.git
するとこんな出力がされました。
 Deleted files
-------------

        Filename          Git id
        ----------------------------------------------------------
        libiPhone-lib.a | d6b9dc4d (511.5 MB), 1455d017 (514.4 MB)
        libil2cpp.a     | ce87c7cd (98.1 MB), 764e279c (92.9 MB)
  <略>
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive

iPhone用のlibとC#をC++に変換するlibが大きかったようです。いずれもgitで管理する必要のないものですが、間違って一時一緒にコミットしてしまっていたようです。

出力にはdeleted filesと書いていますが、この時点ではファイルは消えていなくて、次のコマンドでほんとにファイルを消します。
git reflog expire --expire=now --all && git gc --prune=now --aggressive

小さくなりました。
スクリーンショット 2025-03-29 113958

で、後はコレをリモートのリポジトリにpushすればOK。

と思いきや・・・逆に大きくなっている orz...
スクリーンショット 2025-03-29 135624


どうも単純にpushするのだと、書き換えるのではなく追加されてしまうようです。どうすれば書き換えてくれるのかわからなかったので、仕方なく今回は、リポジトリを新規に作って、そこにpushすることにします。参考にしたサイトはこちら。


まずはBitbucketで新たなリポジトリを作ります。今回はTeleSkymapBT3Mirrorという名前で作成。
このとき今回はデフォルトブランチを、普段使わない名前で作成しました。このあとpushするときに同じ名前だとなんかぶつかりそうな気がして。ホントのところはわかりませんが。
スクリーンショット 2025-03-29 140437


で、さっき大きなファイルを消したリポジトリのフォルダに入って、push先を新しいリポジトリに切り替えます。
cd teleskymapbt3
git remote set-url --push origin https://xxxx@bitbucket.org/xxxx/teleskymapbt3mirror.git
push先が切り替わったか確認します。

大丈夫そうです。
git remote -v
origin  https://xxxx@bitbucket.org/xxxx/teleskymapbt3.git (fetch)
origin  https://xxxx@bitbucket.org/xxxx/teleskymapbt3mirror.git (push)
ということでコレをpushします。

git push --mirror
    <略>
* [new branch]        liteEdition -> liteEdition
 * [new branch]        master -> master
 ! [remote rejected]   aaaa (deletion of the current branch prohibited)
error: failed to push some refs to 'https://bitbucket.org/xxxx/teleskymapbt3mirror.git'

最後のエラーは最初に作ったブランチが消せないよ、と言っているので、放っておきます。
あれ??? もしかして単純に --mirror オプションを付けてpushすれば良いだけだったのかな?
2025/3/30追記:
--mirrorオプションを付けてpushしてもやっぱり追加されるだけで、サイズが増えていました。


後は元のリポジトリを消して、ミラーのリポジトリ名をもとのと同じにして、mainブランチを正しくセットすれば完成。リポジトリのサイズも小さくなっています。
スクリーンショット 2025-03-29 141552

試しにコレをクローンしてUnityで動かしてみたら、問題なく動きました。
スクリーンショット 2025-03-29 141417

StarsPhotoLiteについても同じようにダイエットして、2.4GBまで小さくなりました。
スクリーンショット 2025-03-29 221154
でもまだ後半分以上減らす必要があります。トホホ・・・

2025/3/30追記:
他の大きめのリポジトリで大きいファイルを消したり、一部別のところにバックアップしたりして、どうにか1GBを切ることができました。コレで一安心 ε-(´∀`*)ホッ
スクリーンショット 2025-03-30 120206


2025/3/30更に追記:
よく見たらGitHubはprivateもpublicも無制限で使えるのですね。GitHubに引っ越しするのが一番幸せだったかf^^;