2010-03-08 31 views
10

这是我想要做的:使用Git推动自动拉动远程服务器?

我有一个GitHub存储库,其中的一部分,我想让网页可见。现在我已经在自己的服务器上克隆了存储库,并且运行良好,但为了保持最新,我必须手动登录并提取最新的更改。

我不确定这是否是最好的主意(或最好的方法),但我希望远程服务器在有人推送到存储库时自动进行提取。当有人推送时,GitHub可以很容易地运行一个脚本,但是我不确定一旦有人这么做,该如何解决。

我为了简单而使用PHP,但只是做了类似git pull这样的操作,因为权限而自然不起作用。这是一个坏主意,还是有另一种实现我想要做的事情的方式?这似乎是一个共同的设置,但我不确定。

谢谢。

回答

2

如果很容易运行脚本,你可以设置钩来推动:

  • 从GitHub到裸(空worktree)Web服务器
  • 从裸露的回购协议回购在您的网络服务器上到您的“实时”回购(带有代表您的网站的工作树)

然后,您可以将其与“实时”回购钩挂钩以通过“git合并”将裸回购的内容合并到y中我们的“活”回购),只要您的裸回购推动任何东西。

你会得到你想要的效果:任何推到你的GitHub仓库(对于某个分支我想)会触发你的“活”Web服务器仓库刷新。

1

我已经做出了几乎完全按照这种方式工作的东西,除了接收推送的“远程”回购与随后回购的回购商在同一台机器上。确实相同的一组用户对这两个存储库拥有权限是真实的(也是重要的)。 (但是这应该没问题,你不希望随机的人推动你的回购。)无论如何,我只需要git post-update钩子调用一个shell脚本来为我做拉。最棘手的一点是你必须清理环境(我使用了env -i,或者你可以取消设置与git相关的变量),否则拉就会变得混乱。