我们想要开发一种产品并将其交付给多个客户。现在我们遇到这样的情况:一些客户想要拥有附加功能 x,而另一个客户想要拥有功能 y。 部分功能还需要对产品的软件架构进行一些改变。
当然,所有客户都希望受益于所有客户定义的官方功能。
现在我的问题是如何最好地处理这个问题?我们目前正在使用 SVN 进行版本控制,只要您有一个主干并且可以创建标签,这种方式就非常有效。
我知道我们可以为每个客户创建多个主干,然后将所有功能合并到多个客户主干中,但这需要大量的手动工作,并且很快就会变得困惑。
感谢您的帮助
最佳答案
这是一个大而毛茸茸的话题 - Martin Fowler 有一篇关于功能分支的精彩文章 (http://martinfowler.com/bliki/FeatureBranch.html);还有抽象分支(http://continuousdelivery.com/2011/05/make-large-scale-changes-incrementally-with-branch-by-abstraction/)。
最大的风险是您最终会使用 SVN 作为“正确”架构的替代品。如果您需要以这种方式支持多个功能,您可能应该构建解决方案以在运行时(通过配置)或构建时(通过配置)支持此功能;常见的方法是使用插件。
使用源代码控制系统“合并”功能会使合并过程陷入不可预测的、不稳定的困惑 - 您可以合并来自另一个分支的代码这一事实并不意味着这一切都有意义 - 并且开发人员在不同的功能/分支上工作可能会重复彼此的工作,或者在设计上做出相互排斥的决定。
关于svn - 不同版本产品的项目结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7954524/