Mercurial:创建一个分支而不必先进行更改

25

我听说在Mercurial版本库中创建分支的唯一方法是对工作副本进行更改,然后将更改提交到新分支。

在Subversion中,我可以通过复制 trunk tags 路径下的路径来创建分支而不必进行更改 - 在Mercurial中是否也可以这样做呢?

目前我只看到过TortoiseHg,所以这可能只能通过命令行工具完成,但我不知道如何操作。

我的工作流程如下:

  • 创建功能分支。
  • 在该功能分支中进行一些工作。
  • 创建一个发布候选分支。
  • 将功能分支合并到发布候选分支中。
  • 部署、测试、修复问题、再次部署、测试、修复发布候选分支。
  • 将发布候选分支合并到主干。

非常感谢您的帮助。


6
越来越多的人认为在Mercurial中,对于功能层面的更改,命名分支并不是一个好的选择,因为它们永远不能被删除,只能被隐藏。许多人喜欢将命名分支保留给类似“稳定”和“实验性”之类的长期概念,并使用匿名分支、书签或克隆作为功能和错误修复的分支。这里有一篇很棒的文章:http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/ - Ry4an Brase
3个回答

34

这取决于你所指的分支是什么意思。

如果要创建一个命名分支,只需为其命名然后提交即可,它将成为历史记录中的新变更集,但您不需要显式更改工作文件夹中的任何文件以允许提交。

hg branch NEWNAME
hg commit -m "Created branch NEWNAME"

你也可以使用TortoiseHg对话框来完成这个操作。

但是,如果你想创建另一个未命名的分支,即只是另一个头部,那么是的,你需要进行一些更改。而且实际上,为什么你要创建一个没有任何更改的空变更集呢?只是为了表明“当我有一些更改时,这就是我放置我的分支的地方”吗?


1
回答你的问题,这是下一个更改实际上将是合并结果的地方。TortoiseHg不允许将合并的结果提交到除了合并的两个“输入”之一以外的任何地方,除非我们先创建一个分支。然而,你上面描述的命名分支过程很好地解决了我的问题,谢谢。 - Neil Barnwell

6
你可能想要查看书签扩展(这个扩展即将成为核心Mercurial的一部分)。
如果你熟悉git中分支的工作原理,那么它几乎是相同的。
就像在git中的分支一样,你可以创建一个不提交任何内容的书签。
$ hg bookmark my-feature

1
创建分支后不要忘记使用以下命令将其推送:
hg push --new-branch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接