我们有一个存储库,其中包含几个带有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配置文件。
这似乎是大多数分支和合并讨论都没有提到的常见问题。 任何提示将不胜感激。
答案 0 :(得分:0)
有很多方法可以做到这一点。这是一个。您可以将所有更改集从Java7 repos中提取到Java6 repos,然后运行merge。 在在Java6中进行合并之前,手动修改配置文件以撤消[j7]中的更改,然后提交合并。
对于此更改集,您只需执行一次此操作,这意味着如果稍后您将其他更改从Java7提取到Java6,则不必再次为[j7]烦恼。
答案 1 :(得分:0)
其他可能的解决方案可能会使历史更清晰:
将Java7分支的负责人合并到Java6分支和Java的分支中。然后退出Java6分支上的[j7]变更集。
将变更集[j7]合并到头部Java6分支&丢弃来自java7分支的所有更改(如果使用TortoiseHg,则这是一个标记为“放弃合并目标(其他)修订版的所有更改”的选项。)
将Java7分支的负责人合并到Java6分支的负责人。
如果我们在分支回购中进行配置更改,我们会使用选项B. (将其视为变革集历史上的合并而不合并变更)。
在进行这样的合并时,我们总是在提交消息中包含“合并xxx - 丢弃更改”(这样在浏览历史记录时很明显)
Mercurial的CLI没有专门的“合并丢弃更改”选项,但他们的“提示与技巧”help page解释了如何从命令行实现此目的:
hg -y merge --tool=internal:fail RevOfHeadToDiscard
hg revert --all --rev .
hg resolve -a -m