Хук Git prepare-commit-msg не получает никаких аргументов - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу создать пользовательский prepare-commit-msg хук для моего репозитория git.Сначала я прочитал об аргументах, поэтому я создал что-то вроде test, чтобы увидеть значения этих аргументов.

#!/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 крючка.(есть также один журнал сообщений от этого)

1 Ответ

0 голосов
/ 14 декабря 2018

Причина была в том, что у нас была пользовательская система выполнения хуков:

Каждый <hook> пытался выполнить <hook>.local и <hook>.enectiva (enectiva - наш продукт, поэтому расширение)

Таким образом, в этом случае:

Файл prepare-commit-msg hook содержит:

#!/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
...