git gc をするとファイル数が減ることを最近知ったので、楽しくなって全プロジェクトでやりたくなった。
#!/bin/bash DIR=$(pwd) stdbuf -oL find . -maxdepth 4 -name ".git" | while read -r i; do cd "$DIR" cd "${i%/.git}" pwd git gc --aggressive done
実行時のカレントディレクトリ以下を適当に探索して git gc をしてまわる
git gc
本来は わざわざ実行しなくても 適宜勝手に実行されるらしい。
が、どうも自分の使い方では実行されることがなさそうだったので 今回手動で実行する運びとなった
--aggressive
どうせやるなら派手に行こうぜ。 という理由でつけた
for じゃない理由
for i in $(find . -name .git); do だと、findが終わるまで暇なので逐次処理してほしかった
read -r
-rオプションは バックスラッシュを無視しない というオプション。
今回は無意味だが、おまじないというか、習慣付けておかないといざというときに忘れてしまうので
stdbuf -oL
findはパイプでつなげると出力が全バッファリングされるので、そのままだと結局findが終わるまで暇になる。
よって、行バッファリングをするように指定する
-type d が無い理由
最初ディレクトリのみで指定してたが .git がファイルじゃないパターンもあると今回初めて知ったので、ファイルも対象にした
cd "${i%/.git}"
末尾の /.git を削除。 書式は毎回忘れる