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



我正在寻找在mercurial中管理多个"站点"的最佳实践场景。因为我可能在一个web根中有多个站点,所有这些站点都是不同的-但有些相似(因为它们是根应用程序的"定制")

我应该A)创建wwwroot文件夹的单个存储库(捕获所有站点的所有更改)B)将每个sit文件夹设置为不同的存储库

这个问题是,每个站点需要一个不同的物理目录,由于vhost指向开发,当前需要有"一些"跨站点的物理文件差异。

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

这取决于您的软件结构如何,以及不同站点的独立性如何。最好的情况是,您可以像使用库一样使用核心代码,它位于自己的目录中,并且不需要在不同的站点中更改甚至单个核心文件。然后,您可以自由选择是否要将核心与不同的站点一起在单个repo中开发,或者将核心与站点分开。当core和其他站点相互依赖时,您很可能必须在一个repo中处理所有这些内容。

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

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

  • 不同的网站通常是不可见的开发人员,因为通常只有一个检查出
  • 开发人员必须非常小心地在哪里创建更改,以便只有想要的更改才会进入其他分支,而不是只针对单个分支的特殊更改

你可以考虑将不同站点的公共部分移到核心,如果它们共享许多公共代码。

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

当您采用每个站点一个repo的方法时,最好先创建一个模板站点,其中包含核心组件和基本配置,然后从该模板派生出您的站点-repo。然后,当你在核心中改变了一些东西,也影响了网站,你在模板中做这些改变,然后将这些改变合并到网站的repos中(你只需要注意不要在一个网站的repos中做这个改变,因为当你从网站合并到模板时,你可能会从特定的网站得到一些东西到模板中,你不想在模板中)。

所以我建议

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

    • 当不同站点之间进行大量代码交换时,所有代码都在一个repo中,带有分支

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

    • 全部在一个repo中,没有分支但不同的文件夹,如果不同站点之间没有代码交换

    • 如果站点完全独立,则为每个站点提供一个repo。

我认为,您必须尝试Mercurial Queues与一个repo。即

  • 您将"基础"站点存储在存储库
  • 所有特定于站点的更改被分成一组mq补丁(一个?
  • 可以在站点中创建"push-only" repo,将它们添加到"working" repo的[paths]部分并推送更改或使用export-copy技术
在将站点补丁应用于代码库之后,您将准备为每个站点
使用代码。

最新更新