如何在远程服务器上执行自动 git 拉取?

2022-08-30 21:06:35

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

我想做什么:

  1. 在开发分支的本地计算机上完成工作。
  2. 将更改推送到 git。Git 发布到 Webhook URL,并自动让我的远程服务器在开发站点上拉取更改。
  3. 一旦 QA'd 并确认在开发站点上是正确的,将主分支推送到生产站点(与开发站点位于同一服务器上)。

我在哪里:

我已经在我的本地机器和远程服务器上安装了git。我可以将mods推送到开发分支到git。在远程服务器上,我可以拉取更新,它就像一个超级按钮。问题是,当从本地计算机推送更改时,我无法让远程服务器自动更新。

我的问题是:

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

我天生就是一个Web开发人员,所以git和sysadmin任务通常是我存在的祸根。同样,我知道这个问题与其他问题类似,但我还没有找到一个全面,简洁,安全,最合乎逻辑的方法来解决这个问题。我大约16个小时,已经正式达到了“兜圈子而没有进步”的点。


答案 1

您可以使用GitHub服务钩子轻松完成此操作。

您需要再创建一个文件来处理执行 git 拉取的过程。添加一个名为github.php(或任何您想要的文件)的新文件,然后添加:

<?php `git pull`;

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

因此,当您推送时,GitHub将自动访问此URL,从而导致您的服务器执行.git pull

若要更详细地查看此内容,请转到本教程


答案 2

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

您可以阅读以下几篇文章以获取更多信息:

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


推荐