Git:维护两个具有大多数共同特性的版本

Git:维护两个具有大多数共同特性的版本,git,version-control,Git,Version Control,我的公司希望维护我们产品的SaaS版本和内部版本 大多数功能都是相同的。不幸的是,这种区分不能在逻辑本身内完成。SaaS版本的某些代码不应与内部版本一起提供给客户(出于安全原因) 我不确定如何使用git(或者在我们的例子中是gitlab)实现这一点。也许可以使用SaaS版本或git的cherry pick功能。我还是一个git初学者,所以我很高兴能得到任何帮助。谢谢大家! 分支可能是维护两个相似但不同的系统的一种方法,但这意味着您正在为所做的每个更改增加开销和潜在的人为错误 假设大多数更改都需要

我的公司希望维护我们产品的SaaS版本和内部版本

大多数功能都是相同的。不幸的是,这种区分不能在逻辑本身内完成。SaaS版本的某些代码不应与内部版本一起提供给客户(出于安全原因)


我不确定如何使用git(或者在我们的例子中是gitlab)实现这一点。也许可以使用SaaS版本或git的cherry pick功能。我还是一个git初学者,所以我很高兴能得到任何帮助。谢谢大家!

分支可能是维护两个相似但不同的系统的一种方法,但这意味着您正在为所做的每个更改增加开销和潜在的人为错误

假设大多数更改都需要进入这两个系统,您希望拥有一个包含此共享部分的完全集成的核心存储库。或者,您可以为SaaS和prem特定部分提供单独的回购,但我可能会将所有内容都放在mono回购中,除非您的产品可以轻松分解为多个较小的部分

现在,您有许多选项可以从单个存储库生成两种不同的结果,最简单的是有两种构建配置,一种用于SaaS产品,一种用于内部部署。您可能希望在构建之后运行打包和分发阶段,以便只获取所需的部分,并为本地解决方案生成安装程序

有许多技术可以从相同的源文件、功能切换、依赖项注入、编译器指令、源属性、生成/构建脚本中包含或排除特定文件的条件等生成多个输出

SaaS和in-prem产品的发布过程通常有所不同,SaaS产品的发布节奏通常更快,而且由于您完全控制安装,因此该过程的要求可能不那么严格。您通常只支持SaaS产品的一个或两个版本(当前安装的版本和下一个推出的版本),而您可能支持本地产品的多个版本

微软的Azure DevOps正在处理类似的问题,其中云产品不断发布,但其内部产品仅每季度发布一次,每两年发布一次。他们使用一个称为Microsoft发布流的git流程来管理发布。这在这里有记录:

他们现在正在超越这一点,走向完整的CI/CD,但我怀疑这对您来说是一个有趣的参考