2012-05-10 88 views
7

在开始之前,我知道有很多类似于这个问题的问题,但是我很难找到一个简洁,安全的最佳实践,因为对它们的反馈已经非常多样化。如何在远程服务器上执行自动git pull?

我想要做的事情: 1)在开发分支上完成本地机器上的工作。 2)将更改推入git。 Git发布到webhook网址,并自动让我的远程服务器在开发网站上获取更改。 3)一旦在开发站点上进行了质量检查并确认是正确的,请将主分支推送到生产站点(与开发站点位于同一台服务器上)。

我在哪里: 我在本地机器和远程服务器上安装了git。我可以推动mods到开发分支去git。在远程服务器上,我可以获取更新,并且它像魅力一样工作。问题是我无法让远程服务器在我的本地机器发生更改时自动更新。

我的问题是: 1)对于远程服务器开发网站目录,我应该git init还是git init --bare?我不打算在服务器上进行更新。我希望我的开发团队在本地工作并将mod推送到服务器。我相信我需要使用git init,因为需要工作树来为git存储库设置一个远程别名,但我想确认一下。 2)我很确定从git问题的webhook帖子是由于用户权限。我该如何安全解决这个问题?我已经阅读了许多教程,建议更新git钩子文件,但我觉得这是比我需要采取的措施更激烈。我希望能够让webhook在不添加大量代码(如果可能的话)的情况下安全地提取文件的URL。

我是一个Web开发人员,因此git和sysadmin任务通常是我存在的祸根。再次,我知道这个问题与其他问题类似,但我还没有找到全面,简洁,安全和最合乎逻辑的方法来解决问题。我在大约16个小时的时间里,并且正式击中了“没有进步的圈子”。

非常感谢您的帮助!

+0

哇这是一种不可能找到这一个简单的解决方案。让我想念SVN有点... – Jake

回答

2

我有同样的确切问题,代码和开发技能强,系统管理员技能薄弱。当我终于准备推送代码时,我不得不问GitHub代表他们推荐的方法是什么,他们回答了Capistrano。这是一个Ruby应用程序,它可以在远程服务器上运行命令(如git pull),以及任何其他您可以想象的命令。

这几篇文章你可以阅读,以获得更多信息:

不会撒谎,在学习ing曲线非常陡峭,但是一旦你开始与Capistrano合作,你会发现它对推送代码很有效。我在Symfony中开发我的应用程序,并且我的Capistrano设置可以从我的本地计算机执行一个命令来提取代码,清除缓存和清除日志文件。

+1

这个帮助呢? –

9

你可以用GitHub服务钩子很容易地做到这一点。

你需要创建一个文件来处理执行git pull的过程。添加一个新的文件,名为github.php(或任何你愿意的话),并添加:

<?php `git pull`; 

保存该文件,并上传到服务器上的存储库目录。然后,转到Services Hooks -> Post-Receive URL并将该URL复制到该文件,并将其粘贴到“接收后URL”中。 http://demo.test.com/myfolder/github.php

所以,当你推送时,GitHub会自动访问这个URL,从而导致你的服务器执行一个git pull

要查看其详细信息,去this tutorial

+0

它很好用。 – Lokesh

相关问题