在我们的小办公室里,我们正在设置 mercurial——我们第一次使用“真正的”版本控制系统。我们有三台服务器——一台实时服务器、一台登台服务器和一台开发服务器。
我们还拥有三个相对较大的网站——一个供访问者使用,一个供用户使用,一个内部网站点供办公室工作人员使用。
这三个网站共享一些代码。(例如——一个php类库,一些常用的代码片段等)
在版本控制之前,我们只是使用符号链接来链接到共享库。例如:每个站点都有一个指向“ObjectClasses”目录的符号链接——对 ObjectClasses 中的文件所做的任何更改都将立即可供所有站点使用。您只需将更改后的文件上传到 staging 和 live,就完成了。
但是... Mercurial 不遵循符号链接。因此,我在三台服务器上的三个站点中为共享库设置了一个子存储库(实际上是“四台”服务器,如果您计算开发服务器上有两个程序员和两个独立的存储库克隆的事实)。
所以共享对象库有 12 个工作副本。
那么问题来了:
有没有办法简化上述设置?
这是我们的工作流程的一个示例,它看起来太复杂了 - 但也许这就是使用版本控制的感觉,我们只需要习惯它:
程序员 A 在站点 1 的子存储库中对对象 Foo 进行了更改。他想让它在任何地方都可用,所以他提交它,然后将它推送到登台服务器。我在登台服务器上设置了挂钩,以自动将更改传播到三个站点、登台服务器上,然后再次传播到实时服务器上的三个站点。这会处理登台和实时服务器上的 6 个工作副本。到目前为止,一切都很好。
但是开发服务器呢,这些文件可能正在进行中?
程序员 A 现在需要手动将共享子存储库拉到开发服务器上的站点 2 和 3。他还需要告诉程序员 B 在开发服务器上的站点副本上手动拉取站点 1、2 和 3 上的共享子存储库。如果他在站点 1 上编辑对象 Foo 并在站点 2 上对对象 Foo 进行不同的编辑会怎样。他将不得不解决两个单独的冲突。
我们相对频繁地对对象进行更改。这会让我们发疯。我真的很喜欢版本控制的想法——但是经过两周的努力寻找最佳设置,拥有一份共享文件副本并喊出“嘿-你正在处理那个文件,我想做改变”现在看起来很不错。
真的没有更简单的方法来设置它吗?