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