Git准备提交消息钩子没有得到任何参数



我想为我的git存储库创建自定义prepare-commit-msg挂钩。首先,我读到了关于论点的文章,所以我创建了一些类似测试的东西来查看这些论点的值。

#!/usr/bin/env bash
readonly file_with_message=$1
readonly source_of_message=$2
readonly commit_sha=$3
echo "File: "${file_with_message}""
echo ""
echo "Source: "${source_of_message}""
echo ""
echo "SHA: "${commit_sha}""
echo ""

我得到了以下日志:

File: ""
Source: ""
SHA: ""
commit-msg File: ""
[1111-pre-commit-msg-test 4f347d4] add .idea
5 files changed, 189 insertions(+)
create mode 100644 .idea/fast.iml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 .idea/workspace.xml

基本上,我可以看到,我的钩子是在提交过程中执行的,但没有参数。至少应该有第一个。

$ git --version
git version 2.17.2 (Apple Git-113)

有人知道为什么会这样吗?Thx:(

PS:我可以看到commit-msg钩子的相同行为。(还有一条日志消息(

原因是,我们有自定义的钩子执行系统:

每个<hook>都试图执行<hook>.local<hook>.enectiva(enectiva是我们的产品,这就是为什么扩展(

所以在这种情况下:

包含的文件prepare-commit-msg挂钩:

#!/usr/bin/env bash
hook_name="prepare-commit-msg"
git_path=".git/hooks"
files="./${git_path}/${hook_name}.local ./${git_path}/${hook_name}.enectiva"
for f in ${files}; do
if [[ -f ${f} ]]; then
${f} || exit 1
fi
done

这个文件也得到了正确的论据,但没有传递。我以前的日志代码来自prepare-commit-msg.enectiva,所以有点误导。prepare-commit-msg.enectiva没有收到任何自变量。

所以分辨率是使用${f} $1 $2 $3

这是更改挂钩后的结果:

File: ".git/COMMIT_EDITMSG"
Source: "message"
SHA: ""

编辑:

${f} "${@}" || exit 1

相关内容

  • 没有找到相关文章

最新更新