分布式版本控制。 - Git& Mercurial ......多个网站

时间:2011-09-07 20:09:27

标签: version-control mercurial

我正在寻找关于在mercurial中管理多个“网站”的最佳实践场景。由于我可能在Web根目录中有多个站点,所有站点都不同 - 但有些相似(因为它们是根应用程序的“自定义”)

我应该吗? A)创建wwwroot文件夹的单个存储库(捕获所有站点的所有更改) B)使EACH坐标文件夹成为不同的存储库

这个问题是每个站点需要一个不同的物理目录,因为vhost指向开发,并且当前需要跨站点具有“某些”物理文件差异。

这里的最佳做法是什么?我倾向于每个目录的单独存储库。这将使跟踪任何分支和合并为该ONE网站清洁....

2 个答案:

答案 0 :(得分:1)

这取决于您的软件的结构,以及不同网站的独立程度。最好的情况是,您可以使用核心代码,例如库,它位于自己的目录中,并且不同站点中甚至不需要更改单个核心文件。如果您想在单个仓库中开发核心以及不同的站点,或者从站点中分离核心,那么您可以自由选择。当核心和不同的网站相互依赖时,你可能不得不在一个单一的回购中处理所有这些网站。

因为根据我的经验,当不同的部分彼此独立时,开发工作会更好,我强烈建议将核心内容纳入可以通过目录包含在网站中的内容。

下一点是如何开发不同的网站。如果他们共享大量代码,则可以将它们开发为不同的分支。但这个方案有两个缺点:

  • 开发人员通常看不到不同的网站,因为通常只有一个检出
  • 开发人员必须非常注意创建更改的位置,以便只有想要的更改进入其他分支,而不是仅对单个分支特殊的更改

如果他们共享大量公共代码,您可以考虑将不同站点的公共部分移动到核心。

另一种情况是,如果他们都没有任何共同点,那么事情会好得多。然后,您需要决定是否希望它们驻留在不同的存储库中,或者作为单个存储库中的不同目录。当这些不同的站点以某种方式彼此相关时(比如说它们都是同一个公司),那么将它们放入一个共同的仓库,作为不同的子目录可能会更好。当它们彼此无关(每个站点属于不同的客户,并且这些站点上的更改不是彼此同步创建的)时,每个站点的一个回购更好。

当您拥有每个站点的一个repo方法时,如果您首先创建一个包含核心组件和基本配置的模板站点,并从此模板派生您的站点repos作为克隆,那么也可能是好的。然后当您更改核心中也会影响网站的内容时,您可以在模板中进行这些更改,然后将这些更改合并到网站repos中(您只需要注意不要在其中一个网站回购中执行此更改,因为当您从站点合并到模板时,您可能会从特定站点获取到模板中的内容,而您不希望这些内容位于模板中。

所以我建议

  • 将核心开发为单一独立产品
  • 为您的网站选择正确的开发模式

    • 所有在一个回购中,有分支机构,当不同网站之间有很多代码交换时

    • 但更好的重构网站不共享代码,因为分支方法有缺点

    • 如果不同网站之间没有代码交换,则只有一个仓库,没有分支但有不同的文件夹

    • 如果每个网站完全独立,则会有一个回购。

答案 1 :(得分:0)

我想,你必须用一个回购试试Mercurial Queues。即

  • 您在存储库中存储“base”站点
  • 所有特定于站点的更改都分为一组MQ补丁(每个站点一个补丁)
  • 可以在网站中创建“仅推送”回购,将它们添加到“工作”回购的[路径]部分并推送更改或使用导出复制技术

将网站补丁应用到代码库后,您就可以使用每个网站的代码