Git を用いて、特定日時以降に更新されたファイルの一覧を取得したい要件がありました。
これを素直に取得する方法がなさそうだったので、以下のようにして代用しています。
$ git log --after 2020/07/01 --name-only --pretty=oneline --full-index | grep -vE '^[0-9a-f]{40}' | sort -u
オプション
指定しているオプションは以下です。
--after
- 特定日時以降のコミットを対象とするフィルタです。
--name-only
git log
の出力に、各 commit で変更されたファイル名を出力できるようにします。
--pretty=oneline
git log
で出力されるログを、<sha1> <title line>
という 1 行形式にまとめます。
--full-index
- commit hash 40 文字を全文字出力できるようにします
解法
ファイル名だけを取り出すことは Git だけだとできなさそうでした。
このため、--name-only
で表示できるようになるファイル名以外を grep
で除外する必要がありました。
grep
でできるだけ正確に「ファイル名以外を除外する」ために、 --pretty=oneline
と --full-index
でコミットログ行を 1 行だけにまとめています。そして、当該行は commit hash 40 文字が行先頭にあるか否かで判断するようにしています。
果たして
良い方法は無いものか…。