当Github收到更新时,将其推送到远程服务器

时间:2013-03-04 07:08:33

标签: git deployment amazon-ec2 githooks git-post-receive

让Github自动将任何更新推送到远程服务器的设置是什么?

这对于在Github上维护代码库以及让网站运行该代码库非常有用。

  1. 我在自己的电脑上有我的回购,这是我工作的地方。

  2. 我在我的本地仓库上提交了我的更改,并将它们推送到我的Github仓库。

  3. 我希望我的Github repo然后将这些更改推送到我的远程服务器。

  4. 我一整天都在研究,使用'钩子'听起来很合理。也许在Github上使用'post-receive'钩子,然后向我的远程服务器运行push命令。

    有什么建议吗?

2 个答案:

答案 0 :(得分:10)

据我所知,github不允许你定义“真正的”钩子。喜欢收到后。相反,他们向开发人员提供了一个名为webhook的东西。你可以做的是向你指定的任何URL发出Web请求,无论何时推送到你的存储库。

所以你可以做的是:在远程git服务器上设置一个web服务器,并配置github在post-receive上对它进行http调用。只要github通知你的远程服务器,就从github上拉一下它。

请参阅此处了解如何使用webhooks:https://help.github.com/articles/post-receive-hooks

P.S。 一个真正的钩子机制可能是github的一个可能的安全漏洞,因为它允许你在他们的服务器上执行自定义代码。所以他们做了一些不允许你执行任何事情的东西,但仍允许你做任何你想做的事。

答案 1 :(得分:7)

为了说明Yervandanswer(已投票),请将此 peligangit 视为简单HTTP服务器的示例(您可以在其上安装) amazon-ec2实例),将:

  • 启动一个简单的HTTP服务器。
  • 通过GitHub webhook
  • 收听投诉
  • 它将下拉新提交

workflow

该库将获取,然后重置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])