OpenShift から git clone したらリポジトリサイズ大きすぎてダウンロードに時間かかるからスリムにまでの顛末。
まずは対象 app 一式を rhc git-clone
でローカルにダウンロード、どのくらいサイズあるのか調べたら 458M もあった…
# rhc git-clone [appname] ※ [appname]は実際のアプリケーション名 # cd [appname] # du -hs .git/objects 458M .git/objects
git log --stat
実行してどのファイルが重たいか探す。
# git log --stat … path/to/aaa.zip | Bin 21330395 -> 17754473 bytes path/to/bbb.zip | Bin 41860218 -> 37652391 bytes path/to/ccc.zip | Bin 25494801 -> 20683412 bytes path/to/ddd.zip | Bin 20664210 -> 20660728 bytes …
zipファイルで結構容量喰ってることが分かった。zipファイルそのものはもう削除してるんだけど、履歴には残っていてそれが容量喰っているということだ。
ということで以下コマンド流して zip ファイルをリポジトリから強制削除。
# git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch path/to/aaa.zip' # git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch path/to/bbb.zip' # git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch path/to/ccc.zip' # git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch path/to/ddd.zip'
最後に git gc
で最適化。
# git gc --prune=now
でも全然サイズ小さくならない。なぜだ…
# du -hs .git/objects 458M .git/objects
何度も試したんだけど全然サイズ小さくならないから結局リポジトリ作り直した。OpenShift のフォーラムにリポジトリ作り直し手順が載ってるからその手順通りにやった。
まず rhc ssh [appname]
で ssh ログイン、リポジトリディレクトリのバックアップを取っておく(うまくいったらあとで消す)
# rhc ssh [appname] # cd $OPENSHIFT_REPO_DIR/../ # cp -R repo repo_bak
次に ~/git/ ディレクトリに移動してリポジトリを作り直す。これでリモートの作業は終わり。
# cd ~/git/ # rm -rf [appname].git # [appname].git/hooks 以下は権限の関係で削除できないけどOK # cd [appname].git # git init --bare # exit
最後にローカルでリポジトリを再作成、リモートに push しておわり。
# cd [appname] # rm -rf .git # git init # git remote add origin [gitリポジトリURL。OpenShiftコントロールパネルまたは rhc app-show [appname] で確認可能] # git add . # git commit -am "initial commit" # git push origin master
念のため rhc git-clone してリポジトリサイズ確認。458M → 92K に減った。成功。
# rhc git-clone [appname] # cd [appname] # du -hs .git/objects 92K .git/objects
容量喰うファイルはバージョン管理から外しておくべき…