Подтвердить что ты не робот

Захват сообщения не работает

Мой крюк фиксации сообщения не запускается после git. Я проверил, что крючок работает, если я просто запускаю его с терминала. Код на крючке:

#!/bin/sh
#.git/hooks/post-commit
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

perl -pi -e 's/([a-f0-9]+)$/'$( git rev-parse HEAD )/ ../../config/commit.git

Я переименовал файл для post-commit в. /.git/hooks/, а разрешения - -rwxr-x-r-x, поэтому я не уверен, почему он не работает.

4b9b3361

Ответ 1

Попробуйте поместить некоторые эхо-строки до и после строки perl следующим образом:

echo "post-commit started"
perl ...........
echo "post-commit finished"

Таким образом, вы можете проверить, действительно ли работает script, потому что при запуске

git commit

вы должны увидеть

post-commit started
post-commit finished

К концу вашего вывода.

Ответ 2

Я оставлю это здесь как ответ, потому что наткнулся на свой собственный ответ, когда мой пост-фиксация не была запущена:

chmod +x .git/hooks/post-commit

Вероятно, применяется к любому крюку. На самом деле, вероятно, применяется к любому типу script.

Ответ 3

Мой скрипт после фиксации не вызывался, потому что:

Я назвал скрипт post-commit.sh, а не просто post-commit.

Чтобы включить сценарий перехвата, поместите в подкаталог hooks вашего каталога .git файл с соответствующим именем (без расширения) и исполняемый файл. С этого момента он должен называться. Хорошо рассмотрим большинство основных имен хуков. Смотрите git-scm

Не уверен, почему у меня в голове хукам нужно расширение файла bash.

Я также не осознавал, что хук-скрипты не могут иметь расширения файлов. Например,

Если вы хотите использовать связанные скрипты-хуки, вам придется их переименовать; их имена файлов заканчиваются на .sample

Надеюсь, это кому-нибудь поможет.

Ответ 4

В дополнение к ответам, отмеченным здесь, обратите внимание, что если вы ожидаете пользовательского ввода в свой хук, вам нужно перенаправить стандартный ввод на клавиатуру, как это делается (по крайней мере, для скрипта bash);

exec < /dev/tty