コミットメッセージにチケット番号+[半スペ]が無い場合エラーを返すスクリプト
業務ルールでRedmineとコミット内容を紐ずけるため、#00000 コミットメッセージ
でコミットをするという内部ルールがあります。
ただうっかり入力し忘れたり、半角スペースが全角スペースになってRedmineと紐図かなかったりというまれにあったので、Gitフックを使用して対策をしてみたいと思います。
Gitフックとは
Gitフックは、Gitでコマンドを実行する直前もしくは実行後に特定のスクリプトを実行するための仕組み。
commit-msg フック
コミットメッセージを入力後、処理を走らせることができる。
以下格納先。
.git/hooks/commit-msg
.sample
を外し、フックスクリプトとして使用する。
他にも、
コミット直前に実行:pre-commit
プッシュ直前に実行:pre-push
など色々とある。
Rubyで書く
個人的にRubyを学習中だったのでRubyでスクリプトを記述しました。
1行目に以下を記述。
#!/usr/bin/env ruby
#!
はシェバングと言い、これ以下に書いてあるコマンドで実行し直してくれる。
/usr/bin/env
を使う事でwhich ruby
で出てくる環境依存のPATHを記述しなくてもよくなる。
※/usr/bin/env
も実は環境依存だがほぼ共通で入っている。。。はず。
内容
#!/usr/bin/env ruby
# #00000+[半スペ] 、Mergeコミット以外エラー
message = File.read(ARGV[0])
$regex = /#\d+\s|^Merge branch/
if !$regex.match(message)
puts "\e[31mチケット番号入力してください\e[0m"
exit(1)
end
ARGV(アーグヴイ)
コマンドラインからスクリプトの引数として与えられた文字列を要素として持つ。
# ファイルを読み込んだ際コマンドラインの第一引数を実行する
File.read(ARGV[0])
matchメソッド
正規表現とmatchメソッドを使用し、定義した正義表現に当てはまらない場合はエラーメッセージを実行し処理を中断させる。
exitコマンド
エラーの文字列を表示した後、exitコマンドで処理を終了させる。
exit(0)
:正常終了
exit(1)
:以上終了
色を変更する
エラーメッセージの色を変えた方が視覚的にわかりやすいのでメッセージの色を変更する為、エスケープシーケンスを使用。
エスケープシーケンスとは
ターミナル上で色を含む特定の制御を実現するための特殊な文字列
print "\e[31mhello\e[0m" # 赤色
感想
Gitフックをもっと活用すれば、コミット前orプッシュ前にエラーを検知したり色々なことができそう!
一番手こずったのはシェバングでした!!
(最初書き方がわからず全然Rubyを認識しませんでした。。。)
Author And Source
この問題について(コミットメッセージにチケット番号+[半スペ]が無い場合エラーを返すスクリプト), 我々は、より多くの情報をここで見つけました https://qiita.com/Kakkiii00/items/36b1585fae0069117652著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .