如何在Mercurial中为非tip版本创建一个分支?

6
在我的仓库中,我有1到10个版本。我已经推送了前5个(所以下一个hg push将发布6-10个版本)。
但是现在我必须中断我的工作,结果不是100%完成。因此,我想将版本6-10移动到一个新的“实验性”分支中,以允许其他人在不干扰每个人的源代码的情况下完成工作。
如何将分支添加到非tip版本(在我的情况下:从第6版开始)?或者我应该使用完全不同的方法?
2个回答

8

如果不修改历史记录,事后不能应用分支名称。

最简单的方法是要求其他用户将修订版本5作为创建任何更改的父级。例如,其他用户会:

  1. hg clone <your repo> 或者 hg clone --rev 5
  2. hg update -r 5
  3. 工作,工作,工作
  4. hg commit

当他们提交更改时,它将在默认分支上创建第二个头,但这不应该会创建任何问题。一旦您的实验性更改完成,您只需要将这两个头合并在一起即可。

话虽如此,使用 Mercurial Queues (MQ) 可以将您的更改移动到一个分支上。下面的序列展示了如何完成它:

  1. hg qinit(创建新的补丁队列)
  2. hg qimport --rev 6:10(将r6-10导入新的补丁队列)
  3. hg qpop -a(从工作副本中删除所有补丁)
  4. hg branch <branch name>(创建您的新实验分支)
  5. hg qpush -a(将所有补丁应用于您的分支)
  6. hg qfinish -a(将所有补丁转换为永久更改集)

Tim的回答很好。他建议的(第一部分中,此阶段忽略MQ的内容)被称为匿名分支,它比适合长期事物(如发布)的命名分支更适合短期实体,例如错误和功能。我要补充的另一件事是,在第四步提交后,如果您只想推送新的变更集(11),则需要使用hg push -r 11。如果您只执行hg push,则会发送6到11。 - Ry4an Brase
另一个选项是:1)转到您想要从中开始新分支的修订版本,2)使用空提交启动新分支,3)将修订版本变基到新分支上。 - Mike Rosoft

2

Tim已经提出了很好的建议。此外,您可以将实验性更改推送到中央服务器上的不同experimental克隆中(我猜您使用一个)。其他开发人员也可以使用此克隆来推送他们尚未完成的工作,以便让其他人进行审查或继续工作。显然,该克隆的代码尚不准备好使用。一旦某个任务完成,相应的变更集就可以推送到stable存储库。

实际上,对于您的情况,命名分支是一个好主意,但它们的名称被烧入历史记录中的事实大多是一个问题而不是一个功能。在我看来,Git的分支名称更加实用。但是,在某种程度上,您也可以使用书签来处理您的情况,自Mercurial 1.7以来,书签是可推送的(在这里不确定)。也就是说,您使用类似stable(或与团队协商的任何内容)的东西书签修订版本5,而修订版本10则使用类似Aarons-not-finished-work的书签。其他开发人员将只拉取stable,除了负责继续您工作的同事将拉取另一个书签。但是,就个人而言,我尚未使用过这样的工作流程,因此无法确定它在实践中的表现如何。


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