Gitのコミットメッセージを書き換えるフックをRubyで書いてみる
- コミットメッセージにチケット番号を埋め込みたい!
- チケット番号はブランチ名から判断してほしい
みたいな事、ありせんか?
僕はあります。
というわけで、コミットメッセージをいじるフックをRubyで書いてみたいと思います。
適当なリポジトリを作る
$ mkdir hook-sample $ cd hook-sample $ git init $ touch hoge $ git add . $ git commit -m "intialize"
とりあえず、hoge
という空ファイルを作ってコミットしました。
フックを書く!
では早速フックを書いてみます。
今回はコミットメッセージを弄りたいので、
prepare-commit-msg
フックを使います。
Git - Git フック
prepare-commit-msgフックは、コミットメッセージエディターが起動する直前、デフォルトメッセージが生成された直後に実行されます。
と、いうわけで、フック用のファイルを作ります。
$ touch .git/hooks/prepare-commit-msg $ chmod +x .git/hooks/prepare-commit-msg
ここで、実行権限を付けておかないと、フックが起動しません。
(ここで、ちょっとハマる・・・)
では、中身を書きます。
今回は、前提として、
- ブランチ名は
チケット番号-XXXX
となっている - コミットメッセージは
[チケット番号] コメント
とします。
#!/usr/bin/env ruby current_branch = `git br | grep '*'`.chomp.sub('* ', '') # ① if /^(\d+)-.*/ =~ current_branch commit_msgs = File.readlines(ARGV[0]) # ② open(ARGV[0], 'w') {|file| file.print "[#{$1}] " # ③ file.puts commit_msgs } end
まずは、①の部分で、現在のブランチ名を取得します。
次に、②の部分でコミットメッセージファイルの中身を読み込みます。
-m
オプションでメッセージを指定している場合は、そのメッセージが入っていて、
エディタを立ち上げる場合は、デフォルトのメッセージが入ってます。
最後に③の部分で、メッセージの冒頭にチケット番号を挿入します。
やっている事は以上です。
コミットしてみる
ではコミットしてみます。
まずはチケット番号をつけたブランチを切ります。
$ git checkout -b 1234-hoge
hoge
を編集します。
$ echo "hoge" >> hoge
コミットします。
$ git commit -am "modified hoge" [1234-hoge 6f595df] [1234] modified hoge 1 file changed, 1 insertion(+)
お、ちゃんとメッセージにチケット番号が入ってそうですね。
一応、ログを見てみます。
$ git log --oneline 6f595df [1234] modified hoge
入ってますね。