Git Hook – сделайте попытку сервера после того, как я нажму на github

У меня есть локальный репозиторий, и я настроил еще один репозиторий на моем реальном сервере:

www.site.com/projects/ProjectA

То, что я хочу достичь, очень просто: после того, как я нажал на GitHub, я хочу, чтобы репозиторий на www.site.com/projects/ProjectA был PULL – следовательно, обновляйте живую версию проекта, которую может видеть мой клиент.

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

Что я наделал

  1. У меня есть настройки доступа к SSH.
  2. У меня есть удаленный репозиторий на сайте www.site.com/projects/ProjectA, который я создал во время входа в систему с помощью Putty и выполнял git clone (в этот момент все локальное репо, репозиторий GitHub и серверное репо были синхронизированы)

  3. Я скопировал post-receive.sample из .git / hooks на сайт www.site.com/projects/ProjectA/

  4. Я переименовал post-receive.sample для отправки
  5. В github, в настройках repo / webhooks, я создал новый крючок, который указывает на www.site.com/projects/ProjectA/post-receive . Все остальные настройки я оставил без изменений.

Я сделал локальное изменение, совершил, нажал. Обновление концентратора, крючок показывает новую недавнюю доставку. Все хорошо, но серверный репозиторий не обновляется.

Код «hook» – «. / Usr / share / git-core / contrib / hooks / post-receive-email», и я не понимаю, что это делает. Я посмотрел на другие образцы крючков, и я увидел, что некоторые из них имеют знакомые команды: exec git update-server-info, поэтому я решил, что могу написать свою собственную команду. поэтому я написал git pull , сохранил его и сделал изменение – commit – снова нажмите на свое местное репо. Результат был таким же, как и раньше. Затем я попробовал exec git pull . То же самое.

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

Просто видел это без ответа даже после нескольких лет.

Веб-хосты требуют, чтобы вы настраивали прослушиватель HTTP POST на своем сервере. Вы можете добавить маршрут http в свой проект и выполнить соответствующее действие потянуть.

Ссылка: Webhooks

Существует альтернативная реализация, которую я использую в своих проектах:

Предположим, что ~ / example – это ваша общая папка проекта / www. Ssh на ваш сервер:

$ cd ~/example && mkdir .git && cd .git && git init --bare $ cat > hooks/post-receive << EOF > #!/bin/sh > GIT_WORK_TREE=~/example git checkout -f > EOF $ chmod +x hooks/post-receive 

Вышеупомянутое создаст голый репозиторий git в папке ~/example/.git . Добавьте исполняемый крючок после приема и выполните проверку в каталоге примеров.

На местном репо:

 $ git remote add server ssh://my_user@my_server.com:/absolute_path/example/.git/ $ git push server +master:refs/heads/master 

Это хорошо работает для меня. Я могу нажать, отменить фиксацию всякий раз, когда мне нужно.

Ссылка: репозиторий серверов

Если я правильно вас понял, вы хотите, чтобы репозиторий на вашем сервере вытащил, после того как вы нажали на GitHub.

Таким образом, вы должны уведомить свой сервер, чтобы вытащить его, после того как вы нажали из своего локального репозитория. Пост-приемник на сервере не работает, что с этим делать. Он вызывается, после того, как что-то получено, но нажатие на github не делает сервер ничего. (См. https://www.kernel.org/pub/software/scm/git/docs/githooks.html )

Чтобы уведомить об этом сервер, я бы использовал «post-update» hook в удаленном репозитории. Но поскольку ваш пульт находится на GitHub, это может быть проблемой. Поскольку я не пользователь GitHub, я точно не знаю, как это сделать. Попробуйте «Webhook» или «Services» на вкладке настроек вашего репозитория (если вы владеете репозиторием).

Если крючки на GitHup не делают трюк:

Как вы предположили, у вас есть ssh-доступ на вашем сервере, я думаю, это какой-то Linux. Затем вы можете просто написать небольшой скрипт, который обновляет сервер-репо, размещать его на сервере и выполнять его через ssh после каждого нажатия. Я не знаю ни одного крючка, который вызывается на локальном репо после нажатия, поэтому, возможно, вам следует написать еще один скрипт, который делает push и вызывает команду ssh, если нажатие было успешным. Если вы используете Linux-системы, я могу помочь вам со сценариями.

То, что вы делаете с помощью post-receive-hook на сервере, заключается в том, что git pull выполняется после того, как вы нажали на сервер, но вы нажимаете GitHub.

Надеюсь, это объясняет, почему ваш подход не работает.