Gitcommitの前にコミットメッセージを確認したいのですが。 pre-commitフックを使用してそれを行いますが、.git/pre-commitスクリプトでコミットメッセージを取得する方法が見つかりませんでした。どうすれば入手できますか?
_pre-commit
_フックでは、通常、コミットメッセージはまだ作成されていません。 1。代わりに、_prepare-commit-msg
_または_commit-msg
_フックのいずれかを使用することをお勧めします。これらのフックが実行される順序と、通常はフックを使用して行う可能性のあることについて、 Pro Gitの素敵なセクション があります。
1.例外は、コミッターが_-m
_を含むコミットメッセージを提供した可能性があるが、メッセージは_pre-commit
_フックにアクセスできないのに対し、_prepare-commit-msg
_または_commit-msg
_
これをcommit-msg
フックに実装しました。 ドキュメント を参照してください。
commit-msg
This hook is invoked by git commit, and can be bypassed with the --no-verify option.
It takes a single parameter, the name of the file that holds the proposed commit log message.
Exiting with a non-zero status causes the git commit to abort.
my_git_project/.git/hooks
の下に、このファイルcommit.msg
を追加しました(この名前である必要があります)。検証を行ったこのファイル内に次のbashコンテンツを追加しました。
#!/usr/bin/env bash
INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="^(MYPROJ)-[[:digit:]]+: "
if ! [[ "$START_LINE" =~ $PATTERN ]]; then
echo "Bad commit message, see example: MYPROJ-123: commit message"
exit 1
fi
フック名は次のようになります。
commit-msg
、それ以外の場合は呼び出されません:
pre-receive
フック(サーバー側)で次の操作を行うと、リビジョン情報が表示されます。
old, new, branch = sys.stdin.read().split()
proc = subprocess.Popen(["git", "rev-list", "--oneline","--first-parent" , "%s..%s" %(old, new)], stdout=subprocess.PIPE)
commitMessage=str(proc.stdout.readlines()[0])