如何使用Mercurial提取选定的修订版?

时间:2013-12-10 22:45:35

标签: mercurial

我们有一个存储库,其中包含几个带有Java类的Eclipse项目,现在需要同时支持Java 7和Java 6版本的开发。 Java7流将是新的主要开发流,但我们需要管理它们并将它们部署到生产环境中。

我理解分支一点,但似乎只是将所有更改从一个存储库拉到另一个存储库。我需要留下一些变化。

Java 7本地存储库看起来像这样

  [old hist] -> [a] -> (head on default)    
                   \->[j7] -> [d] -> [e] -> [f] (working dir)

其中[j7]仅包含与使用Java 7相关的更改(例如,新的.classpath文件)

我们需要一个Java 6流,它需要包含更改[d],[e],[f]但不包括[jv7]

[a] ->          /-> [d] -> [e] -> [f] -> [b] (head on default)
    \->[j7] -> [d] -> [e] -> [f] 

默认路径现在具有Java7流中的最新工作,除了[j7],它仍然具有旧的Java 6配置文件。

这似乎是大多数分支和合并讨论都没有提到的常见问题。 任何提示将不胜感激。

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。这是一个。您可以将所有更改集从Java7 repos中提取到Java6 repos,然后运行merge。 在Java6中进行合并之前,手动修改配置文件以撤消[j7]中的更改,然后提交合并。

对于此更改集,您只需执行一次此操作,这意味着如果稍后您将其他更改从Java7提取到Java6,则不必再次为[j7]烦恼。

答案 1 :(得分:0)

其他可能的解决方案可能会使历史更清晰:

选项A:

将Java7分支的负责人合并到Java6分支和Java的分支中。然后退出Java6分支上的[j7]变更集。

选项B:

  1. 将变更集[j7]合并到头部Java6分支&丢弃来自java7分支的所有更改(如果使用TortoiseHg,则这是一个标记为“放弃合并目标(其他)修订版的所有更改”的选项。)

  2. 将Java7分支的负责人合并到Java6分支的负责人。

  3. 如果我们在分支回购中进行配置更改,我们会使用选项B. (将其视为变革集历史上的合并而不合并变更)。

    在进行这样的合并时,我们总是在提交消息中包含“合并xxx - 丢弃更改”(这样在浏览历史记录时很明显)

    如何从命令行“合并丢弃更改”:

    Mercurial的CLI没有专门的“合并丢弃更改”选项,但他们的“提示与技巧”help page解释了如何从命令行实现此目的:

    hg -y merge --tool=internal:fail RevOfHeadToDiscard
    hg revert --all --rev .
    hg resolve -a -m