Git 根据推送的分支自动从中央存储库推送到开发和生产

标签 git production staging

我对 Git 还有些陌生,我只将它用于具有简单设置的基本项目。现在我正在努力思考更复杂的设置。我彻夜未眠,在谷歌上搜索,但找不到任何与我想要如何设置相关的内容。

我的网络上有三台服务器:一台用于开发 (dev.example.com),一台用于生产 (www.example.com),另一台充当两者之间的中心阶段 (central.example.com) .

我想在 Central 上创建一个主(可能是裸)Git 存储库,我可以从本地计算机(与三个主服务器分开,但位于同一网络上)推送到该存储库。理想情况下,该存储库将有两个分支:master 和 Development。我的本地机器只会处理 Central 上的这个存储库。

当我推送到 Central 上的开发分支时,Central 应该将这些更改推送到 DEV 服务器。同样,对 master 分支的更改应该推送到 WWW。我认为使用提交/更新 Hook 将是实现此目的的最佳方法。

这是一个粗略绘制的图表:

 Local
   |
 Central
  /   \
DEV   WWW

有人可以指出我正确的方向吗?谢谢!

最佳答案

你必须使用post-updatepost-receive钩子(Hook);它们是在推送到存储库完成后运行的。它们之间唯一的区别在于它们如何获取参数。

我建议使用 ssh 触发器到生产/登台服务器,然后从那里运行 pull ,因为:

  • 无论如何,您都需要在那里运行一些代码,因为 git 中的推送不支持在远程端检查推送的版本。所以你需要另一个钩子(Hook)。
  • 在那里运行推送意味着允许在那里进行推送访问,这意味着还要保护另一件事。另一方面,ssh 触发器将有硬编码的分支来 pull ,因此没有人可以用它造成任何伤害,除非中央存储库也受到损害,更重要的是,即使是这样,潜在的伤害也仅限于欺骗它 pull 坏版本,但无法删除任何数据,并且无法访问计算机的其余部分。

ssh 触发器是一个脚本,与 ssh 中的特定公钥相关联(在 .ssh/authorized_keys 中的公钥前面加上 command=trigger )。当您使用该 key 通过 ssh 登录时,ssh 将忽略客户端提供的命令并运行触发器。这限制了有人窃取 key 时可能造成的损害,因为触发器可以使用它自己的逻辑来知道要做什么,并且不接受来自客户端的任何输入。

或者,您可以简单地推送并安装适当的钩子(Hook)来检查。请参阅this question .

关于Git 根据推送的分支自动从中央存储库推送到开发和生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5753346/

相关文章:

git - 在分支之间复制单个提交,保留 SHA-1 标签

git - git 命令概要中的 `()` 是什么意思?

git - 在 git 存储库中处理密码的最佳做法是什么?

jakarta-ee - 现实世界中的 Glassfish

node.js - 如何在生产服务器上使用 Redis/Node.Js

SSL 证书也在暂存中

database - 登台表/登台数据库是一种反模式吗?

ruby-on-rails - Ruby on Rails *功能*部署的最佳实践?

git - 如何使用git管理一个代码库但有不同的环境

ruby-on-rails - Heroku ArgumentError : Invalid Url. 可能与 Redis 不兼容?