Version control mercurial和VCS的新功能:共享代码多服务器设置

Version control mercurial和VCS的新功能:共享代码多服务器设置,version-control,mercurial,shared,subrepos,mercurial-subrepos,Version Control,Mercurial,Shared,Subrepos,Mercurial Subrepos,在我们的小办公室里,我们正在建立mercurial——这是我们第一次使用真正的版本控制系统。我们有三台服务器——一台实时服务器、一台临时服务器和一台开发服务器 我们还有三个相对较大的网站——一个供访问者使用,一个供用户使用,还有一个供办公室工作人员使用的内部网站 这三个网站共享一些代码。例如,一个php类库,一些常用的代码片段,等等 在版本控制之前,我们只是使用符号链接来链接到共享库。例如:每个站点都有一个指向ObjectClasses目录的符号链接——对ObjectClasses中的文件所做的

在我们的小办公室里,我们正在建立mercurial——这是我们第一次使用真正的版本控制系统。我们有三台服务器——一台实时服务器、一台临时服务器和一台开发服务器

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

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

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

但是。。。Mercurial不遵循符号链接。因此,我在三台服务器上的三个站点中为共享库设置了一个子存储库,实际上是“四台”服务器,如果你考虑到在开发服务器上有两个程序员拥有两个单独的存储库克隆的话

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

所以问题是:

有没有办法简化上述设置

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

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

但是开发服务器呢,在那里可能正在处理这些文件

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

我们相对频繁地对对象进行更改。这会让我们发疯的。我真的很喜欢版本控制的想法——但是经过两周的努力,试图找到最好的设置,旧的草率的方式,有一个共享文件的副本,并呼吁嘿,你在该文件上工作,我想做一个改变,现在看起来很好


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

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

这听起来像是在Mercurial中使用子存储库来处理共享代码,这很聪明,顺便说一下,这很好。它负责跨多个项目共享代码。但是,与其让每个程序员在更新后将内容推送到给定的服务器,不如让程序员推送到其他的暂存存储库。如果您愿意,您可以为每个服务器配置一个,不过我认为将所有开发都保存在一个登台或主存储库中可能更有意义,然后使用该存储库构建/部署到登台和/或活动服务器


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

Hi-我们使用的是LAMP PHP。我们正在使用Netbeans在Windows PC上进行开发,并将Linux开发服务器设置为映射驱动器。那么,您是否建议为共享子repo设置一个单独的主存储库,并让开发人员推送到该存储库,然后一个钩子自动推送到所有不同的站点,并自动更新?当开发服务器上发生冲突时会发生什么情况?这些详细信息很有帮助。我相当怀疑这样的事情。我建议您为您的共享co设置一个主存储库
de,它用作另一个主存储库的子存储库,供开发人员用作克隆自己的沙盒副本的目标。您应该配置您的工具,或者找到像CruiseControl/Nant这样可以轻松提供服务的工具,以进行构建、运行单元测试等等。在将任何内容部署到开发服务器之前,此时应该捕获合并问题。希望这更有意义。看起来有一个PHP友好的Ant版本叫Phing——这与CruiseControl配合得很好——我会研究一下。那么,如果程序员a将更改推送到主子存储库,程序员B如何以检查冲突的方式获取代码?他不需要拉三次吗?每个站点一次?程序员A是否还需要在开发服务器上的另外两个站点的subrepo中进行拉入。