先关闭一个分支再将其与默认分支合并(例如),还是先合并再关闭?
例如,在TortoiseHg中,第一种情况下,您会看到从关闭节点到默认分支的连线。在第二种情况下,您会看到从最后提交到默认分支的连线以及从最后提交到关闭节点的额外连线。
我希望我的意思表达清楚了。也许这只是一种口味问题...
先关闭一个分支再将其与默认分支合并(例如),还是先合并再关闭?
例如,在TortoiseHg中,第一种情况下,您会看到从关闭节点到默认分支的连线。在第二种情况下,您会看到从最后提交到默认分支的连线以及从最后提交到关闭节点的额外连线。
我希望我的意思表达清楚了。也许这只是一种口味问题...
这不是品味问题,而是有所区别。简而言之,先关闭分支,再合并。
对于Mercurial分支名称来说,它只是每个变更集的“元数据”。它确实会影响某些命令的结果,例如hg branches
会省略已关闭的分支,或者hg push
默认情况下禁止在每个分支上添加新的头。但是,这只是过滤作用。
在内部,Mercurial将存储库视为变更集的图形,具体来说是DAG。该图形的拓扑头用于逻辑实现,例如在比较本地和远程存储库期间进行hg pull
时。拓扑头数量越多,可能会(稍微)影响性能-如何关闭分支会影响Mercurial性能?。同样,其中一些数量可能会导致Mercurial在IIS服务器中运行时出现400 Bad Request
错误-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
您可以在这里查看我们得出结论的详细信息。
hg heads
和hg branches
会在它们的输出中包含这些“关闭”的分支 - 如果在命令中指定了-c
,则仍然可以包括它们。hg commit --close-branch
或者Tortoise)时,你实际上只是提交一个新的变更集,其中的改变设置了一个标志来说明X分支已关闭-你可以轻松地更新到该分支并重新打开它,只需执行另一个提交即可。hg branches
的输出中,因此不需要显式关闭。