Ash*_*ary 5 svn version-control release-management
我们在svn下有我们的项目,一切都很顺利.最近,一位主要客户要求我们为他们做一些非常具体的定制,需要编码和填充(无法使用配置或部署完成).我们决定维持两个独立的发展路线:
trunk分支是部署为普通客户提供标准版arsh分支机构面向该客户,并且正在进行持续开发,与之不同trunk现在的事情arsh应该是计数地接收更新trunk,有时候实现的功能arsh是有用的trunk.这种关系有点双向,但一个方向非常普遍(从)trunk到另一个方向arsh是偶然的.
最好的方法是什么?工作流程 ?最佳做法?见解?
编辑:我们使用PHP 5.3,MySQL,Apache和Linux.
最佳实践?#ifdef(或者通过运行时配置或任何其他编译时或运行时条件有条件地包含或有条件地依赖注入的同一接口的单独实现)!
在任何版本控制系统中,将并行版本维护为分支都是痛苦的。并行版本最好使用适当的条件编译或运行时配置技术来维护。
请记住,如果将分支 A 合并到分支 B,然后将分支 B 合并回分支 A,则两个分支将完全相同。这是三向合并的固有属性。这正是您想要的功能分支,但完全不适合为不同客户维护并行版本。
要为不同客户保留版本,请使用条件编译。
这种方法允许每个人始终立即检查他们没有破坏任一变体的任何功能,无论是通过对所有变体运行测试还是由持续集成服务器构建和测试所有变体。
你提到了PHP。那里没有编译步骤,因此配置只是运行时的。我可能会创建一个包含特定于客户的覆盖的目录,该覆盖将有条件地包含在适当的模板中。
注意:我目前正在开发一个 C++ 项目,该项目以这种方式为 20 多个客户定制,并且扩展得很好。我们没有为每个客户提供确切的代码,而是有一组可选的功能,并且不同的子集被运送给不同的客户。这使得测试所有功能变得更容易,因为我们可以构建一个最大变体并对其进行测试。当您发展到大量功能时,这会有所帮助,特别是如果您的项目需要很长时间来构建(我们的持续集成构建运行大约一个小时,每晚构建 8 小时,构建所有客户变体需要一整天以上的时间)。