gitのコミットログにチケットNoが含まれているかチェックする

カテゴリ: git

gitでチーム開発を行っているとき、コメットメッセージに特定のルールが指定されている場合があります。

gitではフック処理というものがあり、commit-msgフックを利用することで、コミットログが特定の条件を満たしていないときにcommit処理を行えないようにブロックさせることができます。

本記事ではcommit-msgフックを使ってチェックする処理の作り方を説明します。

今回、想定するルールは、"コミットログの1行目のissue trackingツールのチケットNoが含まれていること"とし、チケットNoは"HPB-9999"の形式とします。通常はbashなどのシェルスクリプトでフックを作成することが多いですが、今回はあえてPHPでフックのスクリプトを作成してみます。

フックファイルを作成する

まず、フックスクリプトのファイルを作成します。

touch .git/hooks/commit-msg
chmod 755 .git/hooks/commit-msg 

次に、スクリプトの中身を作成します。

#!/usr/bin/env php
<?php

$lines = explode(PHP_EOL, file_get_contents($argv[1]));
if (!preg_match('/^HPB-[0-9]* /', $lines[0])) {
        echo 'コミットログの1行目にはチケット番号(HPB-9999)を含める必要があります' . PHP_EOL;
        exit(1);
}

commit-msgフックでは、コミットログのメッセージが入っているファイル名が$argv[1]で渡されるので、これをfile_get_contents()で読み込みます。さらに、explode()で改行文字で分割した配列にし、$lines変数に代入します。

$lines[0]がコミットログの1行目なので、正規表現を使って1行目の先頭に"HPB-9999 "の形式でログが書かれているかをチェックしています。

チェックに引っかかったら(=ログが書かれていなかったら)、エラーメッセージを表示し、exit()で1を返しています。gitはこのコマンドの結果が0以外の値を返したときに、コミット処理を中断します。

これで準備は完了です。

動作実行する

誤った形式でコミットメッセージを書いてcommitすると以下のようにメッセージが表示され、コミットが行われません。

% git commit -m "invalid comment"
コミットログの1行目にはチケット番号(HPB-9999)を含める必要があります

SoureTreeを使っている場合でも、エラーメッセージは確認できます。

正しい形式でコミットログを書くと、もちろんコミットできます。

% git commit -m "HPB-1234 piyo"
 1 file changed, 1 insertion(+)
Amazonでポイントを賢くGETする方法
Amazonギフト券チャージ で最大2.5%もお得!
こちらもおススメ
カテゴリ: git

コメントを残す

メールアドレスが公開されることはありません。