版本控制-mercurial和VCS的新功能:共享代码多服务器设置



在我们的小办公室里,我们正在设置mercurial——这是我们第一次使用"真实"版本的控制系统。我们有三个服务器——一个活动服务器、一个暂存服务器和一个开发服务器。

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

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

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

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

因此,共享对象库有12个工作副本。

所以问题来了:

有什么方法可以简化上面的设置吗?

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

程序员A在Site 1的子Po中对Object Foo进行了更改。他想让它在任何地方都可用,所以他提交它,然后将它推送到临时服务器。我在临时服务器上设置了挂钩,以自动将更改分配给临时服务器上的三个站点,并再次分配给实时服务器上的这三个站点。这将处理临时服务器和活动服务器上的6个工作副本。到目前为止,一切都很好。

但是开发服务器呢,在那里可能有这些文件的工作在进行中?

程序员A现在需要手动将共享子报表拉到开发服务器上的站点2和3。他还需要告诉程序员B在开发服务器上的站点副本上手动拉取站点1、2和3上的共享子站点。如果他在站点1上编辑Object Foo,并对站点2上的Object Foo进行不同的编辑,该怎么办。他将不得不解决两个不同的冲突。

我们相对频繁地更改对象。这会让我们发疯的。我真的很喜欢版本控制的想法,但经过两周的努力,试图找到最好的设置,拥有一份共享文件副本并大喊"嘿,你在处理那个文件,我想做一个改变"的旧的草率方式现在看起来很好。

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

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

听起来你在Mercurial中使用子库来处理共享代码——顺便说一句,这很聪明——所以这很好。这涉及到在多个项目之间共享代码。但是,与其让每个程序员在更新后将东西推送到给定的服务器,不如让程序员推送到其他"暂存"存储库。如果你愿意的话,你可以为你的每台服务器都有一个,尽管我认为把所有开发都放在一个单独的暂存或"主"存储库中可能更有意义,然后用来构建/部署到你的暂存和/或实时服务器。

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

最新更新