0

在我们的小办公室里,我们正在设置 mercurial——我们第一次使用“真正的”版本控制系统。我们有三台服务器——一台实时服务器、一台登台服务器和一台开发服务器。

我们还拥有三个相对较大的网站——一个供访问者使用,一个供用户使用,一个内部网站点供办公室工作人员使用。

这三个网站共享一些代码。(例如——一个php类库,一些常用的代码片段等)

在版本控制之前,我们只是使用符号链接来链接到共享库。例如:每个站点都有一个指向“ObjectClasses”目录的符号链接——对 ObjectClasses 中的文件所做的任何更改都将立即可供所有站点使用。您只需将更改后的文件上传到 staging 和 live,就完成了。

但是... Mercurial 不遵循符号链接。因此,我在三台服务器上的三个站点中为共享库设置了一个子存储库(实际上是“四台”服务器,如果您计算开发服务器上有两个程序员和两个独立的存储库克隆的事实)。

所以共享对象库有 12 个工作副本。

那么问题来了:

有没有办法简化上述设置?

这是我们的工作流程的一个示例,它看起来太复杂了 - 但也许这就是使用版本控制的感觉,我们只需要习惯它:

程序员 A 在站点 1 的子存储库中对对象 Foo 进行了更改。他想让它在任何地方都可用,所以他提交它,然后将它推送到登台服务器。我在登台服务器上设置了挂钩,以自动将更改传播到三个站点、登台服务器上,然后再次传播到实时服务器上的三个站点。这会处理登台和实时服务器上的 6 个工作副本。到目前为止,一切都很好。

但是开发服务器呢,这些文件可能正在进行中?

程序员 A 现在需​​要手动将共享子存储库拉到开发服务器上的站点 2 和 3。他还需要告诉程序员 B 在开发服务器上的站点副本上手动拉取站点 1、2 和 3 上的共享子存储库。如果他在站点 1 上编辑对象 Foo 并在站点 2 上对对象 Foo 进行不同的编辑会怎样。他将不得不解决两个单独的冲突。

我们相对频繁地对对象进行更改。这会让我们发疯。我真的很喜欢版本控制的想法——但是经过两周的努力寻找最佳设置,拥有一份共享文件副本并喊出“嘿-你正在处理那个文件,我想做改变”现在看起来很不错。

真的没有更简单的方法来设置它吗?

4

1 回答 1

0

如果没有有关您正在使用的特定 Web 平台和技术(例如,.NET、LAMP、ColdFusion 等)的更多信息,这个答案可能是不充分的,但让我试一试。首先,如果我对您的理解正确,那么问题就出在您的工作范式上。您让开发人员对文件进行更改,然后将它们推送到三个不同的站点。我建议将开发问题与构建/部署问题完全分开。

听起来您正在使用 Mercurial 中的子存储库来处理共享代码——顺便说一句,这很聪明——所以这很好。这负责在多个项目之间共享代码。但是,与其让每个程序员在更新后将内容推送到给定的服务器,不如让程序员推送到其他一些“暂存”存储库。如果您愿意,您可以为每台服务器配备一个,但我认为将所有开发保存在单个登台或“主”存储库中可能更有意义,然后用于构建/部署到您的登台和/或实时服务器.

如果您希望自动化此过程,有许多工具可以做到这一点。我通常更喜欢 NAnt 和 CruiseControl 进行构建集成,但我的工作主要是 .NET,这使它非常适合。如果您可以提供更多细节,如果您愿意,我可以提供更多细节,但我认为您要克服的主要问题是您处理工作流程的方式。使用 Mercurial 让多个开发人员乐于从单个存储库中拉/推,然后担心部署到您的服务器进行测试作为单独的步骤。

于 2011-06-21T22:40:16.080 回答