0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git gcで.git/objetcsを掃除する

Last updated at Posted at 2025-03-13

実施に至るまで

開発サーバの空き容量が大分減っているとの連絡があったので、調査したところ.git/配下が一番容量を食いつぶしている事が分かった。

  • デプロイしているソースの総容量は 1.3GB くらい
  • 容量の大半を占めるのはUnityのビルドデータ
    WebGLビルドをしていて、Asset関連がとにかく多い
  • .git配下の容量は気づいたら6GBほど
    .git/objects/packが大半を占めている

以上のことから、過去、ビルドしては消していたUnityのWebGLビルドデータが積りに積もっている事が分かった。

どうにかして容量を削減をしたいので、以下の2案を検討して、そのうちgit gcを今回採用してみました。

案 その1

gitの履歴データを削除して、過去のビルドデータの痕跡を消す案

対応としては一番わかりやすいが、「履歴を消す」様なコマンドはgitに用意されていない。

下記の記事を参考に、メンテナンスを行うことを検討したが、WebGLビルドデータ(一回のビルドで大量のAssetsファイル群が出来る)が非常に多く、ミスが怖いので今回は見送った。

案 その2

git gcコマンドを利用して、不要なオブジェクトなどの掃除を行う案*

こちらを採用した。

  • git gcコマンドのみで完結できるので、作業としては簡単に行うことが出来る。
  • 開発リポジトリと本番リポジトリは分離されており、何かあった時でも対応可能。

コマンド自体はgit備え付けなので、下記の通りgcを叩くだけで実行できた。

git gc

→結果として1GBほど容量が減りました。

しかし、過去のデータが多いこともありどうせならと--aggressive + --prune 付きのgcも実行した。

git gc --agressive --prune=now

→git gc後から更に結果として2GBほど減りました。

また、--agressiveオプションをつけるとエラーが発生することがあるみたいです。
私の環境だと以下のエラーが発生しました。

error: pack-objects died of signal 975)
fatal: failed to run repack

調べてみると、メモリ容量が足りない事によるエラーの模様。
この為にスペックアップするのも微妙なので、packするときに割り振られるメモリ容量を制限しました。

## --globalオプションはつけず、作業しているリポジトリのみに適用
git config pack.windowMemory 512m
git config pack.packSizeLimit 512m
git config pack.threads 1

ここまでで、agressive込みのgit gc完了

最後に

gitだからといって、どかどかファイルコミットするのはやっぱり微妙でした。反省。。
(過去のコミットに戻れるのだから、どこかでオブジェクト管理をしているのは当然ではありますが…)

UnityのWebGLビルドの様に「ファイル数が多い+容量もそこそこ大きいもの」を扱う際は、デプロイの仕方などを考慮したいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?