git post-receive крюк не работает - PullRequest
32 голосов
/ 21 ноября 2011

У меня есть пустое хранилище на стороне сервера репозитория, и я могу успешно фиксировать и передавать с моей локальной машины.Тем не менее, перехват приема не работает.Подробности:

  • Использование SSH в качестве протокола
  • Я переименовал стандарт "post-receive.sample" в "post-receive"
  • Этот файл имеет -rwxr-xr-x permissions
  • Файл принадлежит тому же пользователю, которому принадлежит репо, который является тем же пользователем SSH, который входит в систему и выдвигает
  • Фактическое продвижение идет нормально;файлы обновляются - это просто ловушка, которая не запускается
  • Я пытался поместить echo "Some text" до и после ловушки, но это не отображается (см .: Пост-фиксация крюка не выполняется ),
  • Сценарий перехвата включен ниже, хотя, похоже, это не вызывает проблемы
  • Использование git 1.7.0.4 в Ubuntu 10.04

.

user@server:/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/

Ответы [ 6 ]

58 голосов
/ 20 марта 2013

Для запуска ловушки Git необходимо установить разрешения, чтобы он мог быть исполняемым. Если хук, похоже, не работает, проверьте разрешения и убедитесь, что он исполняемый. Если это не так, вы можете сделать все хуки исполняемыми так:

chmod ug+x .git/hooks/*

... или если вы хотите сделать один исполняемый файл (например, post-receive):

chmod ug+x .git/hooks/post-receive

(Спасибо этому посту )

20 голосов
/ 01 сентября 2015

У меня была эта проблема. В имени файла моего скрипта была опечатка.

пост-получение вместо пост-получения

13 голосов
/ 23 ноября 2011

Проблема была связана с монтированием файловой системы.Раздел был смонтирован как noexec, и поэтому никакие файлы не могли быть выполнены.Это заставило крюк не работать.Я удалил флаг noexec, и теперь он работает просто отлично.

3 голосов
/ 30 августа 2017

Похоже, что GIT НЕ будет запускать хук после получения , если в кодовой базе нет изменений.

В моем случае

Перехват почты не выполнялся, но операция «push» продолжала возвращать следующее сообщение.

Все актуально

Итак, я просто создал пустой файл в своем коде, сделал коммит и затем отправил его на удаленный компьютер. На котором был выполнен хук post-receive .

0 голосов
/ 21 августа 2018

У меня была такая же проблема в системе 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
0 голосов
/ 21 ноября 2011

Вы уверены, что он не работает? Должно быть, вы просто не видите этого. Я предполагаю, что во время выполнения ssh-сеанса не установлено значение stdout, поэтому вы никогда не увидите вывод своего эха. Ссылка предлагает проверить его локально, а не через ssh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...