Git会根据所推动的分支自动将其从中央存储库推送到Dev和Production

|| 我只是对Git有点陌生,我仅将其用于具有简单设置的基本项目。现在,我正在努力将头放在更复杂的设置上。我整夜都在搜寻Google,但找不到任何与我要设定的方式有关的资讯。 我的网络上有三台服务器:一台用于开发(dev.example.com),一台用于生产(www.example.com),另一台在两者之间发挥中心作用(central.example.com)。 我想在Central上创建一个主(可能是裸机)的Git存储库,可以将其从本地计算机(与三台主服务器分开,但在同一网络上)推送到其中。理想情况下,此回购将具有两个分支:master和Development。我的本地计算机将仅在Central上处理此存储库。 当我推送到Central上的dev分支时,Central应该将这些更改推送到DEV服务器。同样,对master分支的更改应推送到WWW。我认为使用提交/更新挂钩将是实现此目的的最佳方法。 这是一个粗略的图表:
 Local
   |
 Central
  /   \\
DEV   WWW
有人能指出我正确的方向吗?谢谢!     
已邀请:
您必须使用
post-update
post-receive
挂钩;它们是在推送到存储库完成之后运行的文件。它们之间的唯一区别是它们如何获取参数。 比我建议对生产/登台服务器使用ssh触发器从那里运行拉,因为: 无论如何,您都需要在那儿运行一些代码,因为push git不支持在远端检查签入的版本。因此,您将需要在此处使用另一个钩子。 在此处进行推送意味着允许在那里进行推送访问,这意味着还需要保护一件事。另一方面,ssh触发器将具有硬编码分支以进行拉取,因此除非中央存储库也受到损害,否则没有人可以对其造成任何伤害,更重要的是,即使是这样,潜在的危害也仅限于欺骗它以拉出不良版本,但是无法删除任何数据,也无法访问计算机的其余部分。 ssh触发器是一个脚本,它与ssh中的特定公钥相关联(将
.ssh/authorized_keys
中的公钥前缀为gg4ѭtrigger)。当您使用该键使用ssh登录时,ssh将忽略客户端提供的命令并运行触发器。这样可以限制有人窃取密钥时可能造成的损害,因为触发器可以使用其自身的逻辑来知道该怎么做并且不接受来自客户端的任何输入。 另外,您可以简单地推动并安装适当的挂钩以检出。看到这个问题。     
您可以在Git中设置钩子,以在此处轻松获得所需的内容。利用post-receive钩子,该钩子从stdin接收以下内容:
<oldrev> <newrev> <refname>
例:
aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
使用
refname
,您可以在脚本中查看正在推送到哪个分支,然后依次推送到相应的仓库-www或dev。 或者,您可以使用仅接收refname的“ 1”钩子,也可以将其用作参数来执行相同的操作。 为了完整起见,必须将挂钩放置在中央存储库的挂钩中。     

要回复问题请先登录注册