Ответ 1
Проблема связана с установкой файловой системы. Раздел был установлен как noexec
, и поэтому файлы не могли быть выполнены. Это заставило крюк не запускаться. Я удалил флаг noexec
, и теперь он работает отлично.
У меня есть серверный сервер с репо, и я могу успешно совершить и нажать с моей локальной машины. Однако крюк после приема не работает. Подробности:
-rwxr-xr-x
echo "Some text"
до и после крючка, но это не показано (см. Post Commit Hook Not Running)..
[email protected]:/home/repos/project1/hooks# cat post-receive
#!/bin/sh
echo "Hook is running..."
export GIT_WORK_TREE=/home/web/project1/www/
git checkout -f
rm -rf /home/web/project1/www/temp/
Проблема связана с установкой файловой системы. Раздел был установлен как noexec
, и поэтому файлы не могли быть выполнены. Это заставило крюк не запускаться. Я удалил флаг noexec
, и теперь он работает отлично.
Чтобы выполнить запуск Git, он должен иметь разрешения, позволяющие выполнять его. Если крючок не работает, проверьте разрешения и убедитесь, что он выполним. Если это не так, вы можете сделать все перехватчики такими, как это:
chmod ug+x .git/hooks/*
... или если вы хотите сделать один крючок (например, post-receive
) исполняемый файл:
chmod ug+x .git/hooks/post-receive
(Благодаря этот пост)
У меня была эта проблема. У меня была опечатка в имени файла script.
после получения, а не post-receive
Кажется, что GIT НЕ запускает пост-прием, если в базу кода есть нет.
В моем случае
Пост-крючок не выполнялся, но операция "push" продолжала возвращать следующее сообщение.
Все обновленные
Итак, я просто создал пустой файл в своем коде, сделал фиксацию, а затем нажал на удаленный. На котором был выполнен захват post-receive.
У меня была такая же проблема в системе Centos 6, где оказалось, что SELinux препятствовал запуску сценариев хуков. Здесь помогло преобразование httpd_git_script_t в разрешающий домен (поскольку "sesearch -A -s httpd_git_script_t -p exec" ничего не дало, т.е. Ни одному процессу, запущенному в домене httpd_git_script_t, не было разрешено разрешение exec):
semanage permissive -a httpd_git_script_t
Вы уверены, что он не работает? Он должен быть запущен, вы просто не можете его увидеть. Моя догадка заключается в том, что в то время, когда он выполнялся, в ssh-сессии не было установлено stdout, поэтому вы никогда не увидите результат своего эха. Ссылка предлагает проверить его локально, а не через ssh.