我对 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-update
或post-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/