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

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

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

  • У меня есть мое репо на моем собственном компьютере, вот где я работаю.

  • Я совершаю свои изменения в своем локальном репо и подталкиваю их к моему репозиту Github.

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

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

Любые предложения?

Ответ 1

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

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

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

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

Ответ 2

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

  • запустите простой HTTP-сервер.
  • прослушать POST из веб-хост GitHub
  • он вытащит новые коммиты

workflow

Эта библиотека будет извлекать, а затем reset основную ветку на начало/мастер.
Это один из способов сделать это. (см. 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])