2012-01-04 70 views
13

我正在使用命名分支的mercurial,并注意到当我创建默认的新分支时,默认标记为非活动分支。例如:Mercurial:保持默认分支“活跃”

C:\data\solutions\test-repo>hg branches 
default      0:aeec280e6310 

C:\data\solutions\test-repo>hg branch feature-branch 
marked working directory as branch feature-branch 

C:\data\solutions\test-repo>hg com -m "created new branch" 

C:\data\solutions\test-repo>hg branches 
feature-branch     1:1cb18d7fa554 
default      0:aeec280e6310 (inactive) 

这是一个问题,因为我们的部署系统显示命名的分支是活动的,可以从中进行部署。

如何让我的默认分支“活动”?

回答

22

“活跃”和“不活跃”分支的概念是我们正在从Mercurial项目中移开的东西。问题在于,分支机构可以在两个状态之间来回翻转,或多或少随机地在不方便的时间 - 就像您刚才所看到的那样。

相反,我们现在将重点放在“开放”与“关闭”之间。这是一个明确的概念:关闭一个分公司负责人,你做

$ hg update feature-branch 
$ hg commit --close-branch -m "passes all tests, ready for merging" 

这将添加为关闭这标志着该分公司负责人特别的变更。当一个分支上的所有头部都关闭时,该分支本身会被视为关闭,并将从hg branches中消失。我建议在合并之前关闭,请see my named branch guide for a longer example

所以我建议你改变你的部署系统来显示开放分支(hg branches)而不是活动分支(hg branches --active)。

+1

但是,这是如何保持默认激活?正如我所看到的,在创建一个命名分支后,您必须更新为默认值,并进行“虚拟”提交,否则默认分支将被标记为非活动状态。 – mslot 2012-05-02 20:10:33

+0

@mslot:我建议使用关闭/打开而不是主动/非主动。忘掉所有关于不活动分支的内容,然后重点关注分支。要重新打开一个分支,您需要在将其标记为关闭的变更集之后进行提交 - 这通常不是问题,因为您想重新打开分支,因为您在该分支上进行了一些实际更改。 – 2012-05-03 09:21:42

+0

为您的指导+1,因为它是非常有用和描述性的。 – glglgl 2016-01-18 12:58:21

13

不活动只意味着它没有头。

在你的情况下,图是这样的:

default:  0 -\ 
feature-branch:  \- 1 --- * 

*意味着“工作目录

当你做更多的修正你的功能(如节点2和3),这将是纵横:

default:  0 -\ 
feature-branch:  \- 1 --- 2 --- 3 ---- * 

当你想feature-branch融入default刚刚更新到default

default:  0 -\--------------------- * 
feature-branch:  \- 1 --- 2 --- 3 

然后合并feature-branchdefault

default:  0 -\-------------------/- * 
feature-branch:  \- 1 --- 2 --- 3 -/ 

它出现“无效”并不意味着你不能用它工作的事实。例如,您的“部署脚本”可以有一个hg update --clean default,即使它显示为“非活动”,它也可以正常工作。

不活动只是意味着它没有头。没有其他的。合并后,它将变为活动状态,并将变为“非活动”feature-branch

不要介意它的活动/非活动状态,只要正常使用。

+0

虽然这是一个很好的例子,显示一个分支被认为是不活动的,但是说'没有头'是误导的,因为*是头部。在这种情况下,特性分支的头部是3:'hg heads feature-branch'会证实这一点。相反,这是一个商业规则(*不同于'没有头'),“hg branches”决定其处于活动状态。 – user2864740 2016-01-07 05:38:42

+0

规则如下:* * * * * * * * * * *所有*的子元素属于一个*不同的*命名分支(如图所示的合并之后),则它被认为是不活动的。在同一个命名分支上创建一个新的头(例如在名称分支上添加一个提交)会立即违反规则,并且至少在一瞬间它会再次激活。 – user2864740 2016-01-07 05:42:48