コミットメセージにブランチ名とプレフィックスを追加するようにしているが、ために忘れることがあるためミスが起きないように以下の2点をgit hookに追加した。
- コミットメッセージの先頭にブランチ名を付けること(prepare-commit-msg)
- コミットメッセージにprefixが記述されているかチェックすること(commit-msg)
prepare-commit-msg側
ブランチ名を取得してそれをコミットメッセージの先頭に追加すれば問題ないと思いましたが、コミットメッセージの修正のためにgit commit --amend
をするとそのたびにブランチ名が追加されてしまいます。
そのため、既にコミットメッセージの先頭にブランチ名が追加されている場合には削除する処理も追加しました。
#!/usr/bin/env ruby
branch = `git branch | grep '*'`.chomp.sub('* ', '')
commit = File.readlines(ARGV[0])
if ARGV.length==0
return
end
index = commit[0].index(branch)
if index != nil && index == 0
commit[0] = commit[0].sub(/^#{branch}\s/, "")
end
open(ARGV[0], 'w') {|file|
file.print "#{branch} "
file.puts commit
}
commit-msg側
コミットメッセージ内にprefixが記述されているかをチェックし、記述がなければ記述するよう促すメッセージを表示する処理にしました。
#!/usr/bin/env ruby
commit_message = File.readlines(ARGV[0])
filter=/(feat|style|chore|refactore|test|doc|fix)+:/
warning_message=<<COMMIT_WARNING
*****************************************************************************
Add a prefix when committing
feat (feature)
fix (bug fix)
docs (documentation)
style (formatting, missing semi colons, …)
refactor
test (when adding missing tests)
chore (maintain)
*****************************************************************************
COMMIT_WARNING
if !filter.match(commit_message[0])
print warning_message
end
今回は既存のプロジェクトに追加しましたが、新規に作成することも考慮するとgitのhookを全リポジトリで共有するよう設定したほうが良いかもしれません。
また、git hookが上手く動作しない場合はエラーメッセージを確認する、もしくは権限設定が漏れていないか確認してみてください。
以下の記事を参考