你如何在远程服务器上进行自动git pull?

时间:2012-05-10 21:07:53

标签: php git

在开始之前,我知道有很多类似的问题,但我很难找到一个简洁,安全,最佳的做法,因为对它们的反馈变化如此广泛。

我想做什么: 1)在开发分支上完成本地计算机上的工作。 2)将更改推送到git。 Git发布到webhook URL并自动让我的远程服务器在开发站点上提取更改。 3)在开发站点上进行QA并确认正确后,将主分支推送到生产站点(与开发站点在同一服务器上)。

我在哪里: 我在本地计算机和远程服务器上安装了git。我可以将mod推送到开发分支到git。在远程服务器上,我可以提取更新,它就像一个魅力。问题是,当从本地计算机推送更改时,我无法让远程服务器自动更新。

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

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

非常感谢您的所有帮助!

2 个答案:

答案 0 :(得分:12)

使用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

答案 1 :(得分:3)

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

这里有一些文章可以阅读以获取更多信息:

不会撒谎,学习曲线非常陡峭,但是一旦你开始使用Capistrano,你会发现它适用于推送代码。我在Symfony中开发我的应用程序,并且我使用Capistrano设置来从本地计算机上一个命令中提取代码,清除缓存和清除日志文件。