Qiita
Git

一日のGitコミットをMarkdownに変換するワンライナー

More than 5 years have passed since last update.


環境非依存化したもの

@suin さんの協力により環境非依存になりました(zshとbashで動作確認)

echo "$(PROJECT=$(url=$(git config remote.origin.url) && url=${url#*github.com?} && echo ${url%.git}) && echo "hash | title" && echo "-----|------" && git log --since='12 hours ago' --author=$(git config user.email) --pretty="format:[%h](https://github.com/$PROJECT/commit/%h) | %s" | perl -nle "\$_ =~ s|#(\\d+)|[#\\1](https://github.com/${PROJECT}/pull/\\1)|g; print \$_")" | pbcopy

一応これが完成形ですが、ここまでくると一つのスクリプトファイルにした方がよさそうな気がしますね。

(追記ここまで)


日報みたいなものを毎日書くことにしているんですが、そこにその日のコミットログを書いておくと便利だと気が付きました。

GitHubリポジトリが github.com/yuku-t/hoge にあり、authorにYukuという文字列を含むとします。

git log --since='12 hours ago' --author=Yuku --pretty='format:[%h](https://github.com/yuku-t/hoge/commit/%h) | %s' | perl -nle '$_ =~ s|#(\d+)|[#\1](https://github.com/yuku-t/hoge/pull/\1)|g; print $_'

これ実行すると

[abcdef](https://github.com/yuku-t/hoge/commit/abcdef) | コミットタイトル

[123456](https://github.com/yuku-t/hoge/commit/123456) | Merge pull request [#1](https://github.com/yuku-t/hoge/pull/1)

みたいなのが標準出力されます。コミットのハッシュとPullRequestのマージコミットの場合はそれに対するリンクも作成しています。

簡単にここで使ってる git-log のオプションについて説明するとこんな感じ。詳しくは man git-log 参照。

名前
説明

--author
コミットした人で絞込み

--since
コミット日時で絞込み

--pretty
出力される内容を変更

でIncrementsでは Qiita:Team を使っているので、Qiita Markdownのテーブル記法を使うようにワンライナーをちょちょっと改造する(pbcopy コマンド使ってるのでMac限定)

echo '

hash | title
-----|------'
> tmp; git log --since='12 hours ago' --author=Yuku --pretty='format:[%h](https://github.com/yuku-t/hoge/commit/%h) | %s' | perl -nle '$_ =~ s|#(\d+)|[#\1](https://github.com/yuku-t/hoge/pull/\1)|g; print $_' >> tmp; pbcopy < tmp; rm tmp

これを実行すると以下の内容がクリップボードに入る

hash | title

-----|------
[abcdef](https://github.com/yuku-t/hoge/commit/abcdef) | コミットタイトル
[123456](https://github.com/yuku-t/hoge/commit/123456) | Merge pull request [#1](https://github.com/yuku-t/hoge/pull/1)

で、これをそのままMarkdownとして解釈させれば下記のようなテーブルになると

hash
title

abcdef
コミットタイトル

123456
Merge pull request #1

便利だなー