在预提交钩子中检索所需的git commit消息

时间:2019-05-19 06:00:35

标签: git git-commit

因此,如果.git / hooks / pre-commit存在,那么它将在以下时间运行:

git commit -am "foobar"

运行。那么如何在预提交中访问所需的git commit消息?

我进行了一些侦查,并将其放在.git / hooks / pre-commit中,并使文件可执行:

#!/usr/bin/env bash

echo "here is pre-commit hook"

env | sort

echo "args:"

echo $@

exit 1;

以下是带有“ GIT”前缀的env变量

GIT_AUTHOR_DATE=@1558245421 -0700
GIT_AUTHOR_EMAIL=alex@alexs-mac.local
GIT_AUTHOR_NAME=Alexander Mills
GIT_EDITOR=:
GIT_EXEC_PATH=/Library/Developer/CommandLineTools/usr/libexec/git-core
GIT_INDEX_FILE=/Users/alex/codes/interos/notifier-server/.git/index.lock
GIT_PREFIX=

该脚本似乎没有参数,因为echo "args:"之后没有任何记录...

那么如何在预提交挂钩中访问所需提交消息?

具体来说,如果提交消息的格式不正确,我希望免于预提交。如果还有另一个钩子可以做到这一点,那么这将是一个很好的答案这个问题。

1 个答案:

答案 0 :(得分:2)

不是最理想的git hooks情况-如果它是一个env集而不是一个参数(git不是非常线程安全的),那会很好

因此请忘掉.git/hooks/pre-commit,而使用.git/hooks/commit-msg,您可能会在其中:

#!/usr/bin/env bash

cat $1
cat .git/COMMIT_EDITMSG

# the two above lines are the same

那是git commit消息,仍在等待提交。