Version control 分布式版本控制吉特和水银。。。多站点

Version control 分布式版本控制吉特和水银。。。多站点,version-control,mercurial,Version Control,Mercurial,我正在寻找在mercurial中管理多个站点的最佳实践方案。因为我可能在一个web根目录中有多个站点,所有这些站点都是不同的,但有些相似,因为它们是根应用程序的“自定义” 我应该吗 创建wwwroot文件夹的单个存储库,以捕获所有站点的所有更改 B使每个文件夹成为不同的存储库 这个问题是,由于vhost指向开发,每个站点都需要一个不同的物理目录,并且当前跨站点需要一些物理文件差异 这里的最佳实践是什么?我倾向于为每个目录使用单独的存储库。这将使跟踪某个站点的任何分支和合并变得更干净。…这取决于软

我正在寻找在mercurial中管理多个站点的最佳实践方案。因为我可能在一个web根目录中有多个站点,所有这些站点都是不同的,但有些相似,因为它们是根应用程序的“自定义”

我应该吗 创建wwwroot文件夹的单个存储库,以捕获所有站点的所有更改 B使每个文件夹成为不同的存储库

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


这里的最佳实践是什么?我倾向于为每个目录使用单独的存储库。这将使跟踪某个站点的任何分支和合并变得更干净。…

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

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

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

开发人员通常看不到不同的站点,因为通常只有一个已签出 开发人员必须非常注意在何处创建更改,以便只有所需的更改才能进入其他分支,而不是仅针对单个分支的特殊更改

你可以考虑将不同站点的公共部分移动到核心,如果它们共享许多公共代码。 另一种情况是,如果他们都没有共同点,那么情况就会好得多。然后,您需要决定是希望它们驻留在不同的repo中,还是作为单个repo中的不同目录。当这些不同的站点之间存在某种关联时,比如说它们都属于同一家公司,那么最好将它们作为不同的子目录放入公共回购协议中。当它们彼此不相关时,每个站点都属于不同的客户,并且这些站点上的更改不是同步创建的,每个站点一次回购会更好

当您采用每个站点一个repo的方法时,如果您首先创建一个模板站点(包括核心组件和基本配置),并将站点repo作为克隆从该模板派生出来,这可能也很好。然后,当你在核心中更改一些同样影响站点的内容时,你在模板中进行这些更改,然后将这些更改合并到站点回购中,你只需要注意不要在其中一个站点回购中进行此更改,因为当你从一个站点合并到另一个模板时,你可能会将特定站点的内容合并到模板中,您不希望出现在模板中

所以我建议

将core开发为单个独立产品 为您的站点选择正确的开发模式

当不同站点之间进行大量代码交换时,通过分支机构进行一次回购

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

如果不同站点之间没有代码交换,则一次回购中没有分支机构,只有不同的文件夹

如果每个站点完全独立,则为其提供一份回购协议。 我认为,你必须尝试一次回购。即

您将基本站点存储在存储库中 将所有特定于站点的更改分为一组MQ修补程序?每个站点的补丁 您可以在站点中创建纯推式回购,将其添加到工作回购的[paths]部分,并推送更改或使用导出复制技术 在将站点补丁应用到代码库之后,您就可以为每个站点使用代码了