使用Mercurial维护程序克隆或命名分支的两个版本?

使用Mercurial维护程序克隆或命名分支的两个版本?,mercurial,branch,Mercurial,Branch,我们正在使用Mercurial来管理一个项目,但我们现在希望创建同一项目的“Lite”版本(即删除或简化某些功能的版本) 由于Lite版本将与完整版本共享其大部分代码,我们正在考虑是否最好: 创建原始项目的克隆,并将每个项目分开 使用命名分支在同一存储库中维护项目的两个版本 我们是版本控制软件的新手,这将是我们第一次使用命名分支。有人能帮我概括一下每种方法的优缺点吗。哪种方法最容易在两个项目之间维护bug修复 谢谢 Andrew您可以使用4种方法中的任何一种方法——它们的功能大致相同,只是用于同

我们正在使用Mercurial来管理一个项目,但我们现在希望创建同一项目的“Lite”版本(即删除或简化某些功能的版本)

由于Lite版本将与完整版本共享其大部分代码,我们正在考虑是否最好:

  • 创建原始项目的克隆,并将每个项目分开
  • 使用命名分支在同一存储库中维护项目的两个版本
  • 我们是版本控制软件的新手,这将是我们第一次使用命名分支。有人能帮我概括一下每种方法的优缺点吗。哪种方法最容易在两个项目之间维护bug修复

    谢谢


    Andrew

    您可以使用4种方法中的任何一种方法——它们的功能大致相同,只是用于同步代码库的命令不同

    对于“独立克隆”解决方案,“保持每个项目独立”是一件坏事(tm),违反了DRY原则:重复使用的代码(Lite版本)必须在一个地方维护,核心的更改从Lite repo拉到完整repo

    注意

    当我写4个解决方案时,除了克隆和命名分支外,我还想到了

    • MQ(Lite版本是存储库中的变更集,完整版本是位于同一个repo上的MQ修补程序
    • 子存储库| Guestrepo(Lite版本为superrepo,完整版本功能为superrepository中的一个或多个子存储库)

      • 同样的问题,我偶然发现了这个问题。现在我找到了一个解决方案,我想与大家分享

        假设我们有两个设备,A和B,它们的固件基本相同,但有一些应该保留的差异。因此,这两个版本保留在两个分支中-
        A
        B

        如果我现在对其中一个版本进行更改,我可以在特定条件下将它们合并到另一个版本

        条件是公共前置词(公共基)必须是“给予”分支

        为了确保这一点,您可以

        hg debugsetparents . <other branch before the modifications>
        
        hg debugsetparents。
        
        这样做之后,当前工作集就像两个分支的合并,只是数据保持稳定,即“我们”保留“我们”的内容

        在此之后,您可以在修改后与另一个分支进行“真实”合并


        这样做的结果是,您可以准确地得到给定分支中手动创建的公共基与给定分支的最终状态之间的差异,从而准确地得到您想要得到的修改。

        也许可以总结一下您具体提到的4种方法?因为现在您似乎正在推荐MQ,然而,我想说还有更好的选择。这对我来说并不是MQ或子存储库的预期使用案例。Mercurial队列是线性的,有些是暂时的;使用子存储库假设您可以将功能集完全分解到它自己的文件集中;这适用于具有定义良好的公共AP的库一、 但是对于同一个应用程序的两个版本来说,这是很难实现的。@LaurensHolst-是的,在一般情况下,我更喜欢(并使用)MQ,以便保持fork'ed项目与上游同步:这只是另一个头疼的问题,而不是pull|merge@ReimerBehrends-看不出MQ的线性有什么不好。“TTL”MQ补丁的版本是开发人员的选择-它们可以是严格永久的,并且可以在demand@LazyBadger-线性意味着您不能创建完整版本的分支,例如,如果您想向其添加新功能。瞬态性质指的是MQs是补丁,您必须在发生冲突时协调它们。在nd,MQs在这方面是穷人的秘密分支。当涉及到历史编辑或暂时搁置实验工作时,MQs会大放异彩,但对于任何大型和永久性的工作都会产生工作流问题。您是否考虑过在构建过程中区分完整版本和精简版本,而不是维护两个版本独立版本?所讨论的应用程序是一个web应用程序,因此没有构建过程。然后部署过程。