概要
HerokuのSlug Size長く使ってると増えてきますよね。。
そこでGitの掃除をして、Slug Sizeを減らす方法を調べました。
私はこの方法で500MB→200MBに削減成功しました。
注意
コミットされた大きなファイルのコミット履歴を消す操作をするため、コミット履歴が大幅に書き換わります。なのでチーム開発をしている場合、作業した人以外は全員git clone
し直してください。
手順
Gitの掃除
- 現状のRepo全体をフォルダごとコピーしてバックアップする
- まず全てのブランチをmasterにマージする
- このコマンドで重いファイルを確認
git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| sed -n 's/^blob //p' \
| awk '$2 >= 2^20' \
| sort --numeric-sort --key=2 \
| cut -c 1-12,41- \
| $(command -v gnumfmt || echo gnumfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
-
du -sh .git/objects
で現状の容量を確認 git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch path/to/heavy/file you/can/set/multiple/files" --prune-empty -- --all
- そのあとこれらを実行
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --aggressive --prune=now
-
du -sh .git/objects
で容量が減っていることを確認 - その後、stagingや各種必要なブランチを作成し、GitHubにforce pushする
- 共同作業者がいる場合、cloneし直してもらう
Herokuの容量削減
heroku plugins:install heroku-repo
-
heroku repo:reset -a appname
でHerokuのrepoをリセットする -
heroku repo:gc -a appname
とheroku repo:purge_cache -a appname
もする(参考: https://github.com/heroku/heroku-repo) - GitHub deploy integrationなどを設定している場合は一度解除し、ターミナルから直接force pushする
- ここでHerokuのSettingsのSlug Sizeを確認する。減っていなければreset, gc, purge_cacheをもう一度する
- その後GitHub deploy integrationを再設定