かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Git log 指定日からの作業内容をテキストファイルに出力したい

日報とか週報とかの提出を求められる時、いちいちテキストを書くのがメンドーなのでgit logをテキストファイルとして出力したいと思いました。

1. 今日とか1週間とかの git log をいい感じにして表示する

1週間分の自分のコミットを [YYYY-MM-DD] ハッシュ: コミット時のコメント で表示するコマンドは次のような感じでできました。

git log 
  --oneline --branches --reverse
  --author="$(git config user.name)"
  --date=iso --since="1week" 
  --pretty=format:"[%ad] %h: %s"

※ 長いから改行しているけど、コマンドラインなら1行で

使用しているオプションの説明

  • --branches
    全てのブランチを対象にする。
    オプションがないと今いるブランチのみが対象になる
  • --author
    author="name" で指定したAuthorのlogだけを取得
    "$(git config user.name)" とすれば .gitconfig にある user.name が対象になる
  • --date
    date="sio" - “YYYY-MM-DD HH mm ss フォーマット date="short" - YYYY-MM-DD フォーマット iso だと時刻が表示されてしまうので、作業時間がバレるのは ちょっとなー って場合は short を指定したほうが良さそう
  • --since
    いつのコミットから表示するか
    日報のように今日の分だけなら --since="today"
    --since="2017-06-25" のように日付を指定することもできる
  • --pretty=format:
    log を表示するフォーマット
    • %ad - コミットした時間 (-date= オプションに従った形式)
    • %h - コミットのハッシュ (短縮版)
    • %s - コミットコメント その他、詳しいオプションについては「git logのフォーマットを指定する - Qiita」に詳しく載っています

2. git log をファイルに出力する

いい感じの git log の表示オプションが作れたら、次はlogをファイルに出力します。
ファイルへの出力はコマンドの最後に > ファイル名 をつけるだけ。
log.txt というファイルを作って出力する場合は次のような感じ

git log 
  --oneline --branches --reverse
  --author="$(git config user.name)"
  --date=short --since="1week" 
  --pretty=format:"[%ad] %h: %s"
  > log.txt

※ 長いから改行しているけど、コマンドラインなら1行で

コマンドを実行すると、コマンドを実行した場所に log.txt が作成されます。

3. 作成したgit logのコマンドをエイリアス化して、日付を引数で渡せるようにする

毎回この長いコマンドを実行するのもメンドーなので、コマンドをエイリアス化して、開始日(since)の指定をオプションで渡せるようにしたいと思います。
git コマンドの エイリアスはglobalなら.~/.gitconfigに、現在の作業リポジトリなら .git/config ファイルに記入されるので、ここに直接コマンドを書いてエイリアスを作成します。

今回は、あるプロジェクトでだけ使いたかったので、リポジトリ内の .git/config に下記のエイリアスコマンドを追記しました。

[alias]
  logfile = "!f () {\
    git log --oneline --branches --reverse --date=short\
    --author=\"$(git config user.name)\"\
    --pretty=format:\"[%ad] %h: %s\"\
    --since=\"$1\"\
    > ../log.txt;\
  };f"

コマンドのエイリアス名は logfile としました。
で、この作業リポジトリ内で 次のようなコマンドを実行すると、、、

$ git logfile today

本日のコミットログをリポジトリのあるディレクトリの1つ上の階層に log.txt ファイルとして書き出せるようになりました!
₍₍ ᕕ(´ ω` )ᕗ⁾⁾ ヤッタゼ

global のエイリアスにする場合は ログファイルの書き出し先のパスをデスクトップにするとか適時工夫する必要があるかと思います。


[参考]

入門git

入門git