是先关闭分支然后将其与默认分支(例如)合并还是先合并然后关闭它更好?
例如,在 TortoiseHg 中,在第一种情况下,您会看到一条从关闭节点到默认分支的线。在第二种情况下,您将看到从最后一次提交到默认分支的一行,以及从最后一次提交到关闭节点的额外行。
我希望我很清楚。可能是口味问题...
是先关闭分支然后将其与默认分支(例如)合并还是先合并然后关闭它更好?
例如,在 TortoiseHg 中,在第一种情况下,您会看到一条从关闭节点到默认分支的线。在第二种情况下,您将看到从最后一次提交到默认分支的一行,以及从最后一次提交到关闭节点的额外行。
我希望我很清楚。可能是口味问题...
这不是品味问题,而是有区别的。简而言之,关闭分支,然后合并。
Mercurial 分支名称只是每个变更集的“元数据”。它确实会影响某些命令的结果,例如hg branches
忽略关闭的命令,或者hg push
默认情况下不允许为每个分支添加新头。但同样 - 它正在过滤。
在内部,Mercurial 将存储库视为变更集的图,具体而言是DAG。该图的拓扑头用于逻辑实现,例如在比较本地和远程存储库时hg pull
。更大数量的拓扑头可以(轻微但仍然)影响性能 -封闭分支如何影响 Mercurial 性能?. 它们中的某些数量也可能400 Bad Request
由在 IIS 服务器中运行的 Mercurial 引起 - https://bitbucket.org/site/master/issue/8263/http-400-bad-request-error-when-pulling。
当一个第一次合并然后关闭时,分支是关闭的 - 好的,默认情况下人类看不到该分支。但是 mercurial 得到了另一个拓扑头。请看下面的视觉解释。因此先关闭。
close then merge merge then close
---------------- ----------------
@ default, head @ default, head
| |
o merge <--> | x close branch, head
|\ | |
| x close branch <--> o | merge
| | |\|
o | dev on default o | dev on default
| | | |
| o dev on branch | o dev on branch
| | | |
| o open branch | o open branch
|/ |/
o default o default
您可以在此处查看有关我们如何得出此结论的详细信息。
在谈论命名分支时,这两种方法之间没有真正的区别,至少在任何最新版本的 Mercurial 中是这样。1.5(?)之前的情况有所不同,但纯粹是因为hg heads
并将hg branches
这些“关闭”分支包含在其输出中 - 如果您-c
在命令中指定,它们仍然可以。
请记住,当您关闭一个分支(使用hg commit --close-branch
Tortoise 或在 Tortoise 中)时,您实际上只是提交了一个新的变更集,其中该变更设置了一个标志以表示分支 X 已关闭 - 您可以轻松更新到分支并通过执行另一个重新打开它犯罪。
但是,当重新打开一个分支时,您在 Tortoise 中看到的“栏”仍将存在于先前关闭的变更集中,因此仅出于这个原因,我个人会选择关闭然后合并策略。我认为,看到你正在从你喜欢的东西合并(因此在合并之前关闭分支)更具视觉指导性。
与“匿名”分支略有不同,因为它们hg branches
在合并后不包含在输出中,因此不需要显式关闭。