Заставьте Github отправлять на удаленный сервер, когда он получает обновления

Что настроено для того, чтобы Github автоматически отправлял любые обновления на удаленный сервер?

Это полезно для поддержки кодовой базы на Github и запуска веб-сайта на основе этой кодовой базы.

  1. У меня есть репозиторий на моем собственном компьютере, здесь я работаю.

  2. Я фиксирую свои изменения в своем локальном репозитории и отправляю их в репозиторий Github.

  3. Я хочу, чтобы мой репозиторий Github затем отправлял эти изменения на мой удаленный сервер.

Я исследовал весь день, и использование «крючков» звучит разумно. Возможно, используя хук «после получения» на Github, который затем запускает команду push на мой удаленный сервер.

Какие-либо предложения?


person Don P    schedule 04.03.2013    source источник


Ответы (2)


Насколько я понимаю, github не позволяет вам определять «настоящие» хуки. Как после получения. Вместо этого они предоставляют разработчикам нечто, называемое веб-перехватчиком. что вы можете сделать с этим, так это отправить веб-запрос на любой указанный вами URL-адрес всякий раз, когда есть толчок в ваш репозиторий.

Итак, что вы можете сделать, это: настроить веб-сервер на удаленном сервере git и настроить github для выполнения http-вызова на него после получения. Всякий раз, когда github уведомляет ваш удаленный сервер, извлекайте его из github.

См. здесь, как использовать веб-хуки: https://help.github.com/articles/post-receive-hooks< /а>

P.S. Настоящий механизм перехвата мог бы быть возможной уязвимостью безопасности для github, потому что он позволяет выполнять пользовательский код на их серверах. Итак, они сделали что-то, что не позволяет вам выполнять что-либо, но все же позволяет вам делать все, что вы хотите.

person Yervand Aghababyan    schedule 04.03.2013

Чтобы проиллюстрировать Ерванда ответ (проголосовал), рассматривайте этот пелигангит как пример простого HTTP-сервера (который вы можете установить на своем экземпляре amazon-ec2), который будет:

рабочий процесс

Эта библиотека будет извлекать, а затем сбрасывать основную ветку на origin/master.
Это один из способов сделать это. (см. githook.py)

def hard_reset_repos(self):
    self.server.source_repo.fetch([self.server.source_repo.origin])
    self.server.source_repo.reset(['--hard', self.server.source_repo.originMaster])
person VonC    schedule 04.03.2013