Захват сообщения не работает
Мой крюк фиксации сообщения не запускается после 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
, поэтому я не уверен, почему он не работает.
Ответы
Ответ 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