2
0

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.

コミットの時にブランチ名とprefixチェックをしてみた

Last updated at Posted at 2018-06-12

コミットメセージにブランチ名とプレフィックスを追加するようにしているが、ために忘れることがあるためミスが起きないように以下の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が上手く動作しない場合はエラーメッセージを確認する、もしくは権限設定が漏れていないか確認してみてください。

以下の記事を参考

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?