$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

gitのcommit日時順にファイル一覧を表示する

レポジトリ内でドキュメントを探している時に、特定ディレクトリの中のファイルをgitのcommit日の順に並べて新しめのファイルを見つけたいなーと思ったことがあったのでやってみた。

例えば https://github.com/golang/go のdoc/以下にある全てのファイルをcommit日時順に一覧してみるには、以下のコマンド一つで良い。

$ git ls-files doc | xargs -I@ bash -c 'echo "$(git log -1 --format="%aI" -- @)" @' | sort -r
2018-01-11T11:30:49-05:00 doc/go1.10.html
2018-01-11T10:41:03-08:00 doc/go_spec.html
2018-01-09T15:32:22-05:00 doc/diagnostics.html
2018-01-09T15:32:22-05:00 doc/debugging_with_gdb.html
2018-01-09T15:26:21-05:00 doc/install-source.html
2018-01-09T15:26:21-05:00 doc/go_faq.html
...

やっていることは

  • git ls-files doc
    • doc以下のファイル一覧を出す
  • xargs -I@ bash -c 'echo "$(git log -1 --format="%aI" -- @)" @'
    • xargsの-Iオプションを使って、ファイル名一つ一つをコマンドに渡す
    • 例えばbash -c 'echo "$(git log -1 --format="%aI" -- doc/go1.10.html)" doc/go1.10.html'のように展開される
  • git log -1 --format="%aI" -- @
    • あるファイルの最新のcommit日時をISO 8601のフォーマットで表示
  • ISO 8601形式なら文字列ソートでも日時順になるのでsort -rする

という感じ。xargs便利。