gpt4 book ai didi

version-control - 从一个代码库开发多种产品的策略

转载 作者:行者123 更新时间:2023-12-04 07:15:41 26 4
gpt4 key购买 nike

我正在开发一个项目,该项目将(很快)分支为多个不同版本(试用版、专业版、企业版等)。

自从 Subversion 首次发布(以及之前的 CVS)以来,我一直在使用它,所以我对分支和标签的抽象概念感到满意。但在我所有的开发经验中,我只真正研究过主干代码。在极少数情况下,其他一些开发人员(拥有存储库)要求我将更改提交到某个分支,而我只是按照他的要求去做。我认为“合并”是一种奇异的魔法,而且我只是在仔细监督下尝试过。

但在这种情况下,我负责存储库,这种事情对我来说是全新的。

绝大多数代码将在所有产品之间共享,因此我假设代码将始终驻留在主干中。我还假设每个版本都有一个分支,每个产品的发布版本都有标签。

但除此之外,我知道的不多,而且我敢肯定有一千零一种不同的方法来搞砸它。如果可能的话,我想避免把它搞砸。

例如,假设我想为专业版和企业版开发一个新功能,但我想从演示版中排除该功能。我将如何做到这一点?

在我的日常开发中,我还假设我需要在工作时将我的开发快照从一个分支切换到另一个分支(或返回到主干)。以最小化困惑的方式做到这一点的最佳方法是什么?

你们还有什么其他的策略、指导方针和技巧建议?

更新:

好吧,那好吧。

看起来分支根本不是正确的策略。因此,我更改了问题的标题以删除“分支”焦点,并且我正在扩大问题范围。

我想我的其他一些选择是:

1) 我总是可以分发完整版的软件,包括所有功能,并使用许可证根据许可证中的授权有选择地启用和禁用功能。如果我采用这条路线,我可以想象 if/else block 的老鼠巢调用某种单例“许可证管理器”对象。在这种情况下避免代码意大利面的最佳方法是什么?

2)我可以使用依赖注入(inject)。但总的来说,我讨厌它(因为它将逻辑从源代码移动到配置文件中,这使得项目更难理解)。即便如此,我仍在分发完整的应用程序并在运行时选择功能。如果可能,我宁愿不将企业版二进制文件分发给演示用户。

3) 如果我的平台支持条件编译,我可以使用#IFDEF block 和构建标志来选择性地包含功能。这对于像整个 GUI 面板这样的大而粗的功能来说效果很好。但是对于较小的跨领域音乐会呢……例如日志记录或统计跟踪?

4)我正在使用ANT来构建。是否有类似 ANT 的构建时依赖注入(inject)之类的东西?

最佳答案

一个最有趣的问题。我喜欢分发所有内容然后使用许可证 key 来启用和禁用某些功能的想法。您确实担心通过代码并继续检查用户是否获得特定功能的许可需要大量工作。这听起来很像您在使用 java 工作,所以我建议您考虑使用方面编织器在构建时插入用于许可证检查的代码。仍然会有一个对象,所有对许可证检查的调用都会进入其中,但是如果您使用方面,它并不是那么糟糕的做法,我会说这是一个很好的做法。

在大多数情况下,您只需要阅读某些内容是否已获得许可,并且您将拥有少量组件,因此该表可以始终保存在内存中,并且因为它只是读取,所以您不应该在线程方面遇到太多麻烦.

作为替代方案,您可以分发多个 jar,每个组件一个,每个组件都获得许可,并且只允许加载获得许可的类。您必须绑定(bind)到类加载器才能实现这一点。

关于version-control - 从一个代码库开发多种产品的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com