SVN:分支机构的部分重新整合?

时间:2011-09-27 13:25:15

标签: eclipse svn subclipse subversive

我正在使用SVN进行版本控制(使用Eclipse / Subversive)。

我们有一个分支和一个主干。该分支是我们项目的专门版本。通常,我们会在分支中尝试一些更改,然后确定这些更改在主项目(主干)中也很有用。但是,主干中不需要分支的所有更改。有些人确实只需要留在分支中,因为它们只适用于该分支的特殊功能。

我希望能够选择重新整合的文件。理想情况下,在进行合并/重新集成之前,我想要从分支到主干的同步视图,但这是不可能的。

你会如何应对这种情况?

2 个答案:

答案 0 :(得分:2)

我可以用Subclipse描述你是如何做到的,以及如何使用命令行来做到这一点。

首先,你不会使用merge --reintegrate。理想情况下,您要合并的更改都是在分支上的一个或多个特定修订中提交的。然后,您只需将分支中的这些修订合并回主干。 Subclipse提供了一个简单的UI,用于选择要从分支合并到trunk的修订版本,它是合并向导中的“Merge range of revisions”选项。如果修订包含一些您不希望的其他更改,则必须在将合并提交到主干之前还原这些更改。您可以从“合并结果”视图轻松完成此操作。

让我们假装当您将合并提交到主干时,它创建了r100

您现在想要更新您的分支,以便下次与trunk同步时r100不会合并回它。因此,要在您的分支上使用merge -c 100 --record-only。在Subclipse UI中,这是合并向导上的“块修订”选项。这会更新分支上的mergeinfo,您只需将其提交到分支。完成此操作后,未来与trunk的同步合并将不会尝试将该修订合并回分支。

分支完成后,正常的合并--reintegrate仍然可以正常工作,并且由于已经从分支合并的更改,您不会遇到任何问题。

答案 1 :(得分:0)

我建议不要尝试使用单一版本控制系统机制管理两个独立的方差维度(发布和功能)。这只是给你一个最初很小但却无休止增长的头痛。随着时间的推移,分支机构会发生分歧,你将永远陷入选择性合并的困境。

http://martinfowler.com/bliki/FeatureBranch.html

功能分支是一个穷人的模块化体系结构,而不是构建能够在运行时/部署时轻松交换进出功能的系统,它们将自己耦合到源控件,通过手动合并提供此机制。

最好的办法是咬紧牙关并重新构建代码,以便不同变体的唯一代码主要放在不同的文件中。然后只需要一些使用依赖注入机制的文件,或者只是#if,它们提到了两种变体,并设置了正确的策略和工厂集的配置等等。

或者,有两个队。当需要对两个变体进行更改时,请执行两次更改。这至少是可扩展和可预测的。