Git пост-получить крючок не работает
Моя установка - сервер Windows XAMPP, с включенным cURL и установленными Git и Hudson. Хадсон опрашивает Git каждую минуту, чтобы найти изменения, и если он их находит, он создает сборку. Я использую эту сборку в качестве сервера тестирования. Это отлично работает.
Я хотел бы установить хук пост-получения в моем центральном удаленном репозитории, который запускает функцию принудительной сборки Hudson.
Я создал файл post-receive под названием "post-receive" в каталоге hooks в моем центральном репозитории Git, тот, который отправляется из локальных веток разработчиков. Каждый из них толкает к своей собственной ветви в центральном хранилище. Я хочу запускать пост-получение сразу после каждого нажатия, вместо того, чтобы проводить опрос Хадсона Git каждую минуту.
Когда я открываю оболочку для удаленного сервера и запускаю "post-receive" в папке hooks, она запускается. Он просто не вызывается, когда люди переходят к нему из локальных копий репозитория в центральный.
Может быть, я не объясняю это правильно, но это то, как я понимаю Git.
Код пост-получения состоит из двух строк:
#!/bin/sh
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken
Опять же, когда я открываю оболочку и запускаю ее, она работает, но когда кто-то нажимает на нее, ничего не происходит, пока не пройдет минута или меньше, Хадсон понимает, что Git был изменен, и затем он строит.
Я рад уточнить, если это будет необходимо. Любая помощь с благодарностью.
РЕДАКТИРОВАТЬ: После игры с этим, я чувствую, что, возможно, пост-получение не выполняется, потому что ссылки не обновляются что-то? Git документация говорит
Он выполняется в удаленном хранилище один раз после обновления всех ссылок.
Означает ли это, что если ничего не обновится, оно не будет выполнено? И если так, я почти уверен, что все обновляется, так что это не должно применяться.
Вот мой процесс: вносить изменения локально. Зафиксируйте изменения. Переместитесь из моего HEAD в удаленную ветвь с именем mybranch (а не из ветки master, которая выбрана). Это момент, когда я хочу, чтобы мой хук выполнялся.
5 ответов
Все эти ответы полезны, но оказывается, что мне нужна директория bin в моей переменной PATH. У меня был только каталог "cmd". добавленной c:\my_path_to_git\git\bin
в PATH и все работает нормально. Я нашел этот ответ методом проб и ошибок и, глядя на журнал ошибок apache. Спасибо за вашу помощь!
Пожалуйста, проверьте, имеет ли ваш файл исполняемые права. В противном случае это не может быть выполнено. Что-то вроде rwxr-xr-x
должно быть достаточно.
Вы можете добавить недостающий бит с помощью
$ chmod +x /path/to/post-receive
Какой способ транспортировки вы используете для продвижения в репо?
Хуки выполняются только при использовании "умных" транспортных протоколов, таких как ssh и реализация http в cgi. Для других "тупых" транспортных протоколов, таких как ftp, rsync и более старая реализация http, перехватчики никогда не будут выполняться. Я предполагаю, что протокол git будет выполнять хуки, но использование этого протокола никогда не считалось хорошей идеей.
Я думаю, что простой ответ заключается в том, что вам нужно переместить содержимое серверной части пост-получения вместо клиентской
Попробуйте использовать полный путь для скручивания в файле после получения, поскольку PATH может отличаться от того, который выполняется сценарием вручную.
Если вы хотите посмотреть, в какой среде выполняется скрипт post-receive:
#!/bin/sh
export > file
или просто (он покажет переменные env. после отправки в репо)
#!/bin/sh
export
Кроме того, я не уверен, как работает scrips оболочки в Windows, поэтому может помочь #!/ Path / to / instal / sh вместо #!/ Bin / sh