20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Git の commit-msg hook でコミットメッセージにチケット番号が含まれるかチェックする

Posted at

Git の commit-msg hook でコミットメッセージにチケット番号が含まれるかチェックする

概要

ここ最近のBTSのチケットとバージョン管理ツールは
コミットコメントによる連携機能が標準で搭載されているものが多いです。

しかしコミット時にチケット番号を記述し忘れて連携できず・・・などと言うことがあると思います。
git は履歴の改ざんができるので後から修正することもできますが、少し手間がかかります。
そこで、フックを利用してチケット番号を含んでいないコミットを拒否するようにします。

commit-msg フック

commit-msg入力後に処理を挿入できます。
下記ファイルに処理を記述します。

./.git/hooks/commit-msg

記述する言語は好みで。
私はRubyが好きなのでRubyで書きました。

commit-msg コード

Rubyで書きました。
BTSが要求するチケット番号は シャープと数字の書式だとします。
例えば「#9」や「#25」。

.git\hooks\commit-msg

#!/usr/bin/env ruby
message = File.read(ARGV[0])

$regex = /#\d+/

if !$regex.match(message)
  puts "[POLICY] No Ticket No Commit!!"
  exit 1
end

チケット番号なしでコミット

$ git commit -m 'no ticket No'
[POLICY] No Ticket No Commit!!
$ echo $?
1
# コミットがキャンセルされたことを確認
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   hoge.txt
#

チケット番号ありでコミット

$ git commit -m '#23 fix hoge.txt'
[master 2b98dfa] #23 fix hoge.txt
 1 files changed, 1 insertions(+), 0 deletions(-)
$ echo $?
0
# コミットされたことを確認
$ git status
# On branch master
nothing to commit (working directory clean)

備考

フックを利用してこんなことをすると良いかも

  • README.mdなどドキュメントしか変更していない場合はコミットコメントを改ざんして [ci skip] を付与し、
    Travis CIをスキップする
  • コミットコメントが1行目に見出し、2行目に空行、3行目以降に詳細、のフォーマットになっているかチェックする
20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?