Mercurial的捆绑扩展是否被视为其核心功能集和版本控制方法的一部分?

时间:2009-11-16 08:50:29

标签: mercurial dvcs

我目前正在尝试评估Mercurial,以了解系统试图推广的理念 - 但令我困惑的一件事是捆绑的“扩展”的存在以及它们如何适应混合。

在核心软件包中,Mercurial附带了许多实现为扩展但仍默认禁用的功能。 (见:https://www.mercurial-scm.org/wiki/UsingExtensions#Extensions_Bundled_with_Mercurial

这是我很困惑的事情:

  • 这些扩展是否被Mercurial开发团队视为一等公民,因此是整体Mercurial方法的一部分?

  • 为什么它们是在默认功能之外实现的,默认情况下是禁用的?

我不需要有关如何激活扩展的信息,这是非常直接的 - 这是我很好奇的分离背后的逻辑。

我试图理解这个问题的原因是因为如果它与项目的整体理念不同,我真的不想尝试通过扩展来反对Mercurial的反对方法。

2 个答案:

答案 0 :(得分:9)

  

这些扩展是否被Mercurial开发团队视为一等公民,因此是整体Mercurial方法的一部分?

是的,尽管我们通常不会主张将它们用于新用户,但它们对于高级用户非常有用。我想开发团队中的每个人都启用了扩展(至少是mq,patchbomb,有时还有记录)。

hgext/中接受的扩展程序会在包含之前进行审核,我们通常会要求它们提供测试。但它们通常由外部贡献者拥有,并且除了核心hg中的API更改之外,开发团队不会更新它们。

  

为什么它们在默认功能之外实现并默认禁用?

我们通常认为hg应该保持简单,添加更多命令可能会使用户感到困惑(例如,如果您有一个简单的工作流程,则无需了解mq)。但是,如果一个命令被认为对大多数用户有用,它可以从扩展转移到核心(对于bisect,情况就是subrepo功能)。

答案 1 :(得分:5)

发布后,我几乎立即了解了以下hg命令:

hg help extensions

这包含一些我认为在Mercurial帮助文档中没有的信息:

  

默认情况下,由于各种原因未加载扩展名:它们会增加启动开销;它们可能仅用于高级用途;它们可能提供潜在的危险能力(例如让你摧毁或修改历史);他们可能还没准备好迎接黄金时段;或者他们可能会改变Mercurial股票的一些常规行为。因此,用户可以根据需要激活扩展。

这有助于回答我的部分问题。