我注意到some answers有关分支名称quote the Mercurial wiki的问题,表明每个功能的分支或每个bug的分支命名约定可能会导致性能问题。在提交时使用--close-branch
标志将分支标记为关闭的能力是否会对此性能声明产生任何影响?
答案 0 :(得分:28)
在提交时使用
--close-branch
标记将分支标记为关闭的功能是否会对此性能声明产生任何影响?
使用hg commit --close-branch
标记分支只会在变更集元数据中创建一个带有close=1
标记的新变更集。然后,hg branches
和hg heads
等命令将不知道显示此分支/头部。这些命令使用分支缓存来加快速度,我们希望缓存能够很好地扩展分支数量。
但是,有些操作的复杂性与拓扑头的数量呈线性关系。这包括1.9版之前使用的发现协议。版本1.9中的新发现协议仍将在其“样本”中交换拓扑头,但样本大小上限为200个变更集。
可能还有其他代码路径仍然在头部数量上线性扩展,这就是为什么我们建议在合并前关闭:
$ hg update bug-123
$ hg commit --close-branch -m "All fixed"
$ hg update default
$ hg merge bug-123
而是在关闭前合并:
$ hg update default
$ hg merge bug-123
$ hg update bug-123
$ hg commit --close-branch -m "All fixed"
后一种方法在图中留下悬垂的头(拓扑头)。
答案 1 :(得分:23)
关闭分支可能不会对性能产生任何影响,但这不是重点。性能影响很小,当然不是我建议你避免使用短期开发线的永久分支名称的原因。以下是维基的相关引用:
Mercurial旨在与数百个分支机构合作。它仍然适用于一万个分支,但是一些命令可能会显示出明显的开销,只有在工作流已经稳定后才能看到。
MG和我(我们是你们两个关联问题中的主要回答者)的原因是因为我们一次又一次地看到人们在得知Mercurial中的分支名称是永久性的时候会非常恼火。这是通常的交换,每周几次在IRC中发挥作用:
或类似地:
如果您希望永久性的永久分支名称在您的更改上(而MG,我在这两个问题上的共同回答者确实如此),那么一定要使用它们,并且不要担心性能。但是要担心你的工具如何代表分支:就像Mercurial本身一样,工具通常是为了扩展变更集的数量,而不是分支的数量。因此,他们经常做一些天真的事情,例如将所有分支名称放入一个下拉菜单中。当命名分支变得更受欢迎时,这个GUI问题最终将得到修复。
Steve Losh出色的Guide to Branching in Mercurial能很好地拼出你的(四个!)选项。选择你喜欢的东西,并确信有很多人喜欢你选择的任何一个,并且至少有一些人拥有比你更多的分支。