我们希望开发一种产品并将其交付给多个客户。现在我们有一些客户希望拥有额外功能x而另一位客户希望拥有功能y的情况。 某些功能还需要对产品的软件架构进行一些更改。
当然,所有客户都希望受益于所有客户定义的官方功能。
现在我的问题是如何处理这个问题?我们目前正在使用SVN进行版本控制,只要您有一个主干并且可以创建标签,这种方法就可以正常工作。
我知道我们可以为每个客户创建几个中继,然后将所有功能合并到几个客户中继中,但这是很多手动工作,并且很快就会变得混乱。
感谢您的帮助
答案 0 :(得分:3)
这是一个很大的毛茸茸的主题 - 马丁福勒(Martin Fowler)对Feature Branching(http://martinfowler.com/bliki/FeatureBranch.html)进行了很好的撰写。还有抽象分支(http://continuousdelivery.com/2011/05/make-large-scale-changes-incrementally-with-branch-by-abstraction/)。
最大的风险是你最终使用SVN作为“适当”架构的替身。如果您需要以这种方式支持多个功能,您应该构建解决方案以在运行时(通过配置)或在构建时(通过配置)支持此功能;常见的方法是使用插件。
使用您的源代码控制系统“合并”功能使合并过程变成一个不可预测的,不稳定的混乱 - 您可以在另一个分支的代码中合并的事实并不意味着它将全部有意义 - 并且开发人员在不同的功能/分支上工作可能会重复彼此的工作,或者在设计上做出相互排斥的决定。