ben*_*ith 6 version-control build-process release-management
我正在研究一个项目,该项目将(很快)分为多个不同的版本(试用版,专业版,企业版等).
我一直在使用Subversion,因为它首次发布(之前是CVS),所以我对分支和标签的抽象概念感到满意.但在我的所有开发经验中,我只是真正研究过中继代码.在少数情况下,一些其他开发人员(拥有存储库)要求我对某个分支进行更改,我只是做了他要求我做的任何事情.我认为"合并"一种奇怪的黑色艺术,我只是在仔细监督下尝试过.
但在这种情况下,我负责存储库,这种事情对我来说是全新的.
绝大多数代码将在所有产品之间共享,因此我假设代码将始终驻留在trunk中.我还假设每个版本都有一个分支,每个产品的发布版本都有标签.
但除此之外,我不太了解,而且我确信有一千零一种不同的方法来搞砸它.如果可能的话,我想避免搞砸它.
例如,假设我想为专业版和企业版开发一个新功能,但我想从演示版中排除该功能.我怎么做到这一点?
在我的日常开发中,我还假设我需要在工作时将开发快照从分支切换到分支(或返回到主干).以最小化混淆的方式,最好的方法是什么?
您建议的其他策略,指南和提示是什么?
更新:
好吧,那好吧.
看起来分支根本不是正确的策略.所以我改变了问题的标题,以消除"分支"焦点,我正在扩大问题.
我想我的其他一些选择是:
1)我总是可以分发具有所有功能的完整版软件,并使用许可证根据许可证中的授权有选择地启用和禁用功能.如果我采用这种方式,我可以想象一个老鼠的if/else块嵌套调用某种单独的"许可证管理器"对象.在这样的情况下,避免代码意味着什么的最佳方法是什么?
2)我可以使用依赖注入.但一般来说,我讨厌它(因为它将逻辑从源代码转移到配置文件中,这使得项目更难以理解).即便如此,我仍在发布完整的应用程序并在运行时选择功能.如果可能,我宁愿不将企业版二进制文件分发给演示用户.
3)如果我的平台支持条件编译,我可以使用#IFDEF块并构建标志来有选择地包含功能.这适用于像整个GUI面板这样的大而粗糙的功能.但是,对于较小的跨领域音乐会,例如日志记录还是统计跟踪呢?
4)我正在使用ANT构建.是否有像ANT的构建时依赖注入?
一个最有趣的问题。我喜欢分发所有内容,然后使用许可证密钥来启用和禁用某些功能的想法。您有充分的理由担心,检查代码并继续检查用户是否获得了特定功能的许可需要大量工作。听起来很像您在 java 中工作,所以我建议您考虑使用方面编织器在构建时插入用于许可证检查的代码。仍然会有一个对象,所有对许可证检查的调用都会进入其中,但如果您使用某个方面,那么这种做法并不是那么糟糕,我想说这是一个很好的做法。
在大多数情况下,您只需要读取某些内容是否已获得许可,并且您将拥有少量组件,因此该表可以始终保存在内存中,并且因为它只是读取,所以您在线程方面不会遇到太多麻烦。
作为一种替代方案,您可以分发多个 jar,每个被许可的组件一个,并且只允许加载被许可的类。您必须绑定类加载器才能实现此目的。
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |