2017.8.1追記
正規表現がマッチしないケースを発見したので、gistのほうを更新しました。使ってくださっている方は手元のスクリプトを更新してください。
はじめに
Pull RequestやMerge Request以外の方法ではmasterやdevelopブランチへのマージを許さない感じの各種ワークフローを実践していると、自然とリリースノートの中身ってMergedのリストになりますよね。
私も仕事でよく社内向けのリリースノートを作るのですが、手作業でMerge Requestのリストを作るのが結構手間だったわけです。
というわけでRubyの練習がてら作ったのがgit-mr-diffです。
Getting Started
install
gistからコピペしてきてパスの通った場所に置いてください。Rubyが必要ですがMacの人は気にしなくていいです。Windowsでの動作確認はしていません。
usage
$ git mr-diff -h
List of GitLab merge requests between the range expression like 'branch-a...branch-b' (with Markdown friendly list format).
usage: git mr-diff mybranch...development
or git mr-diff (default: master...HEAD)
$ git mr-diff
List merge requests for range: master...HEAD
* !123 hogehoge
* !124 fugafuga
git mr-diff
を実行すると、カレントブランチとmasterの間にあるMerge RequestをMarkdownのリストにして並べてくれます。
具体的なコミットを指定して、git mr-diff dee34df...334edab
みたいな書き方でもOKです。
あとはどこかのリリースノートにコピペすればOK!
Practical Usage
リリースブランチで実行
もともとこのために作りました。
私はgit-flowっぽいbranching modelを採用しているので、developブランチに変更を溜めていって、リリースするときに release/1.2.2 のような名前のブランチを経由してmasterブランチにマージしたものを実際にビルド&デプロイします。
このrelease/***というリリースブランチにリリースノートを書いているわけですね。
リリースブランチをチェックアウトした状態でgit mr-diff
を実行すると、良い感じにmasterブランチとの差分を出してくれるので、リリースマージ用のMerge Requestにリリースノートを書くのが捗るわけです。
タグ間のdiff
GitLabにもタグにリリースノートを書く機能が付きましたね。前回のタグと今回のタグの間で入った更新をリリースノートやCHANGELOGに書きたい場合は、次のように使うとよいでしょう。
$ git mr-diff v1.2.2...v1.3.0
まとめ
標準出力に出しているので、他のコマンドと組み合わせて、リリース用MRの作成を自動化したりするのも良いと思います。
リスト作りはgit-mr-diffで省力化して、もっと大事なことをリリースノートに書いていけるようにしたいですね。
おまけ
エンジニア募集中です。 https://www.wantedly.com/projects/53479
追記 2/15
くりの人が既にパワフルなのを作ってたようです
@Nkzn 以前似たような機能を持つgem作ったことありますw https://t.co/5oDF0GrUy3
— sue445 (@sue445) 2016, 2月 15