はじめに
レビューをしていても動作確認していても入れちゃいけないコードがコミットされてしまうということがありますね。
自分でなんどかやらかしてしまっているので戒めのためにコミット前に禁止ワードが入っていないかチェックするフックを追加してみます。
参考ページ
http://qiita.com/niku4i/items/f39eb7d4d5c4f5c0775c
http://qiita.com/quattro_4/items/f9e0884f2efe7e8c033a
フックのスクリプトを設置する
-
.git/hooks/pre-commit
に下記のスクリプトを設置してコミット前に禁止ワードが含まれていないかをチェックします。 - コードのフォーマッターなどすでに
pre-commit
が存在する場合は http://qiita.com/nirasan/items/41558a0fd903e01f263d を参考に追加してください。
.git/hooks/pre-commit
#!/bin/sh
if [ -e ~/.git_prohibited_words ]; then
while read word; do
# Skip comment or blank lines
echo $word | grep ^# > /dev/null && continue
echo $word | grep '^\s*$' > /dev/null && continue
IFS=$'\n';
for file in $(git diff --cached --name-only)
do
result=$(git diff --cached -U0 -- $file | grep -A5 -B5 -i "$word")
if [ $? -eq 0 ]; then
if [ -z $NO_WORD_CHECK ]; then
cat <<EOL
[WORD CHECK ERROR]
FILENAME:
$file
PROHIBITED WORD:
$word
$result
HINT:
If you want to force commit, please append prefix 'NO_WORD_CHECK=1' to command.
EOL
exit 1
else
exit 0
fi
fi
done
done < ~/.git_prohibited_words
fi
禁止ワードを設定する
- 禁止ワードは
~/.git_prohibited_words
に改行区切りで複数個設定できるものとし、下記のように設定します。
$ echo "prohibited word" >> ~/.git_prohibited_words
実行する
- 禁止ワード
defined prohibited word.
を設定してコミットに含めた場合、以下のような表示とともにgit commit
が失敗します。
[WORD CHECK ERROR]
FILENAME:
path/to/filename
PROHIBITED WORD:
defined prohibited word.
diff --git a/path/to/filename b/path/to/filename
index eb36957..511fd1a 100644
--- a/path/to/filename
+++ b/path/to/filename
@@ -6,0 +7 @@
+defined prohibited word.
HINT:
If you want to force commit, please append prefix 'NO_WORD_CHECK=1' to command.
禁止ワード入りのコードをコミットする
- 禁止ワード入りのコードを強制でコミットさせたい場合は
NO_WORD_CHECK=1 git commit
と実行してください