如何在Mercurial中为非尖端修订创建分支?

时间:2011-03-16 13:44:12

标签: mercurial branch

在我的回购中,我有修改1到10.我已经推高到5(所以下一个hg push将发布修订版6-10)。

但我现在必须打断我的工作,结果并非100%完成。所以我想将修订版6-10移到一个新的“实验性”分支中,以允许其他人完成的工作而不会破坏每个人的来源。

如何将分支添加到非尖端修订版(在我的情况下:从修订版6开始)?或者我应该采用完全不同的方法吗?

2 个答案:

答案 0 :(得分:7)

如果不修改历史记录,则无法在事后应用分支名称。

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

  1. hg clone <your repo>甚至hg clone --rev 5
  2. hg update -r 5
  3. 工作,工作,工作
  4. hg commit
  5. 当他们提交更改时,它将在default分支上创建第二个头,但这不会产生任何问题。完成实验性更改后,您只需将两个头合并在一起。

    话虽这么说,可以使用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(将所有修补程序转换为永久更改集)

答案 1 :(得分:2)

蒂姆已经有了很好的建议。此外,您可以将实验性更改推送到中央服务器上的一个独特的实验性克隆(我猜您使用了一个)。其他开发人员也可以使用此克隆来推送他们尚未完成的工作,以便让其他人审阅或继续它。很明显,这个克隆的代码还没有准备好使用。完成某项任务后,可以将相应的更改集推送到 stable 存储库。

实际上命名的分支对你的案例来说是一个好主意,但是他们的名字被烧成历史的事实主要是一个问题而不是一个特征。恕我直言Git的分支名称更实际。但是,在某种程度上,您还可以使用书签处理您的案例,这些书签自Mercurial 1.7以来可以推送(这里不确定)。也就是说,您可以使用 stable (或者您在团队中同意的任何内容)为修订版本5添加书签,并且修订版10会被标记为 Aarons-not-finished-work 之类的内容。然后其他开发人员只需提取 stable ,除了你应该继续工作的同事,谁会拉另一个书签。但是,我个人还没有使用过这样的工作流程,所以我不能说它在实践中是否表现良好。