揮発性のメモ2

知識をメモ書きしておく

全てのプロジェクトで git gc をする

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が終わるまで暇になる。
よって、行バッファリングをするように指定する

-maxdepth 4

ディレクトリを3つまで潜るときは、自身も含めるので+1した4を指定する。
再帰の深さを指定するときは、オプションの先頭に書かないとfindが怒る

-type d が無い理由

最初ディレクトリのみで指定してたが .git がファイルじゃないパターンもあると今回初めて知ったので、ファイルも対象にした

cd "${i%/.git}"

末尾の /.git を削除。 書式は毎回忘れる