gitのフックは、特定のイベントをトリガーするスクリプトであり、本質的にはハンドラーです。 それらは.git / hooksディレクトリにあります。
たとえば、簡単なハンドラーを作成してみましょう。 そのタスクは、コミットの編集可能な説明に必要な情報を入れることです。
したがって、プロジェクトの.git / hooksディレクトリにprepare-commit-msgスクリプトを作成し、次の内容を含めます。
#!/bin/sh
# master
last_master=`git log origin/master| head -n 1|cut -f 2 -d ' '`;
#
parent=`git log | head -n 1|cut -f 2 -d ' '`;
# . __
# 1364_restore_xterm_title
ticket=`git branch|grep '* '|cut -f 1 -d '_'|cut -f 2 -d ' '`;
# Ticket #
if [ "$last_master" == "$parent" ]; then
echo "Ticket #$ticket" > "$1".tmp;
fi
# GIT_AUTHOR_IDENT
SOB=$(git var GIT_AUTHOR_IDENT | sed -n "s/^\(.*>\).*$/Signed-off-by: \1/p")
grep -qs "^$SOB""$1"|| echo "$SOB" >> "$1".tmp;
# diff "+++", "---", "@@"
(echo; git diff --cached| grep -e "+++" -e "---" -e "@@"|sed -e 's/.*/# &/')>> "$1".tmp;
#
(echo; sed -e '/^$/d' "$1") >> "$1".tmp
mv "$1".tmp "$1";
スクリプトは、コミッターの署名を挿入し、このコミットで変更された機能のリストを追加します。 さらに、プロジェクトには厳密に規制されたワークフローがあるため、特定の方法でコミットの発行を行う必要があるため、便宜上、これがブランチの最初のコミットである場合にのみ、コミットの説明の先頭にチケット番号の挿入を追加しました。
このフックはクライアント側で機能し、名前が示すように、 git commitが呼び出されたときに起動します。