Gitでフックを使用する例

gitのフックのメカニズムを理解するには、それらの使用を開始して、その動作と内部での配置を確認してください。

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が呼び出されたときに起動します。



All Articles