web-dev-qa-db-ja.com

gitフックでコミットメッセージを取得する

Gitcommitの前にコミットメッセージを確認したいのですが。 pre-commitフックを使用してそれを行いますが、.git/pre-commitスクリプトでコミットメッセージを取得する方法が見つかりませんでした。どうすれば入手できますか?

23
fish potato

_pre-commit_フックでは、通常、コミットメッセージはまだ作成されていません。 1。代わりに、_prepare-commit-msg_または_commit-msg_フックのいずれかを使用することをお勧めします。これらのフックが実行される順序と、通常はフックを使用して行う可能性のあることについて、 Pro Gitの素敵なセクション があります。

1.例外は、コミッターが_-m_を含むコミットメッセージを提供した可能性があるが、メッセージは_pre-commit_フックにアクセスできないのに対し、_prepare-commit-msg_または_commit-msg_

28
Mark Longair

これを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
9
Neo

フック名は次のようになります。

commit-msg、それ以外の場合は呼び出されません:

1
JammingThebBits

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])  
0
ugurarpaci