すでにコミット済みのファイルを無視する & git 軽量化
コード読みたくて clone したら一緒に管理されてる gif やら png やらその他のバイナリファイルも
clone されて DISK 圧迫するからそこら辺は消して無視したい。
gitignore や .git/info/exclude で無視しようとしても、すでにコミットされてるから無視できない。
そんな時は、下記の方法を使う。
1.assume-unchanged
#無視 git update-index --assume-unchanged [ファイル名] #無視解除 git update-index --no-assume-unchanged [ファイル名]
2.skip-worktree
#無視 git update-index --skip-worktree [ファイル名] #無視解除 git update-index --no-skip-worktree [ファイル名]
どちらでも、無視してくれる。
2つのコマンドの違いは、無視されたファイルの変更を維持するかどうか。
前者は変更されても、変更されてないと扱う。
なので、リモートのファイルに変更がある状態で git pull するリモートのファイルが取り込まれる。
後者の場合は、取り込まれない。
設定を確認するには、下記のコマンド
git ls-files -v
git pull して、バイナリファイルが戻ってくると嫌なので、
下記のコマンドで、バイナリファイルとかを無視して一括で削除。
find . -type f \( -name \*.gif -o -name \*.swf -o -name \*.png -o -name \*.jpg \) -print0 | xargs -0 git update-index --skip-worktree find . -type f \( -name \*.gif -o -name \*.swf -o -name \*.png -o -name \*.jpg \) -print0 | xargs -0 rm -f
1.9Gあったリポジトリが、1.2Gまで小さくなった。
git status しても差分は出てこない。
さらに、下記のコマンドを実行すると1.1Gまで小さくなった。
git gc --aggressive
そこそこ満足。
もっと小さくできないかは引き続き調べる。
参考
http://blog.bbtune.com/archives/1329/to-ignore-uncommitted-changes-in-a-file-that-is-already-tracked
http://qiita.com/items/56d0d3ba7a1300625f92
http://d.hatena.ne.jp/stakizawa/20080522/t1
http://techracho.bpsinc.jp/baba/2012_05_22/5594