Хук после фиксации не работает

Мой хук фиксации сообщения не запускается после 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

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


person Dave Long    schedule 22.02.2011    source источник


Ответы (4)


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

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

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

git commit

Тебе следует увидеть

post-commit started
post-commit finished

Ближе к концу вашего вывода.

person Peter Farmer    schedule 22.02.2011
comment
благодаря. Пост-фиксация была запущена, но произошла ошибка. Путь должен был быть ./, а не ../../. - person Dave Long; 23.02.2011
comment
К принятому ответу следует добавить бит ответа о разрешениях Стивена Лу. - person mlg; 04.11.2019

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

chmod +x .git/hooks/post-commit

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

person Steven Lu    schedule 08.01.2013
comment
Это как раз та проблема, с которой я столкнулся. Спасибо, что включили это в качестве ответа. - person jbranchaud; 06.03.2013
comment
Ох уж эти надоедливые разрешения. У меня тоже была конкретная проблема. Спасибо. :) - person arxpoetica; 23.05.2013
comment
Пропустил и это. Спасибо! - person andershqst; 27.05.2014
comment
что делать, если у вас есть права доступа 777, а ловушка все еще не запущена? пост-оформление запускается, а пост-получение - нет, когда это точно такие же команды. Он должен работать на git pull. - person Dariux; 06.01.2015
comment
@ Darius.V может быть, ему действительно нужно получить что-то, а не уже обновленное? Просто мысль. - person Steven Lu; 02.02.2017

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

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

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

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

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

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

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

person Bryce Johnson    schedule 07.12.2016
comment
Я также пропустил эту часть инструкций; Я только что увидел but any properly named executable scripts will work fine и зашел в pre-commit.sh. Закончил с этим вопросом, увидел самый популярный ответ и подумал, что да, я уже это сделал. Потом я заметил твой ответ. Спасибо! - person Ickster; 19.02.2017
comment
Это хороший ответ! Насколько я могу судить в мире UNIX, расширения файлов не имеют большого значения. Это просто соглашение, принятое Windows. Большая часть путаницы, связанной с этим, может быть связана с поведением Windows по умолчанию, заключающимся в скрытии этих расширений, которые даже в Windows являются очень важной частью имени и пути к файлу. - person Steven Lu; 30.03.2018

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

exec < /dev/tty
person n00b    schedule 24.09.2019