Version control 寻找支持标准开发和客户特定开发的版本控制系统

Version control 寻找支持标准开发和客户特定开发的版本控制系统,version-control,Version Control,在我们公司,我们已经建立了一个数据集成工具,并已销售给多个客户。大多数客户都有不同的要求。我们通过使用基于继承的自制机制实现了这些特定于客户的扩展(因此每个安装都知道哪些类需要加载,哪些类不需要加载)。但所有这些特定于客户的代码仍然与标准代码在同一代码库中 现在,这已经不可能了,原因有很多(代码库变得丑陋和庞大,需求冲突等等) 出于这个原因,我们决定分离代码库:一个用于标准产品,几个特定于客户的代码库 我现在正试图找到一个支持这种方法的版本控制系统。这是我的愿望清单: 对不同版本的多个“标准”

在我们公司,我们已经建立了一个数据集成工具,并已销售给多个客户。大多数客户都有不同的要求。我们通过使用基于继承的自制机制实现了这些特定于客户的扩展(因此每个安装都知道哪些类需要加载,哪些类不需要加载)。但所有这些特定于客户的代码仍然与标准代码在同一代码库中

现在,这已经不可能了,原因有很多(代码库变得丑陋和庞大,需求冲突等等)

出于这个原因,我们决定分离代码库:一个用于标准产品,几个特定于客户的代码库

我现在正试图找到一个支持这种方法的版本控制系统。这是我的愿望清单:

  • 对不同版本的多个“标准”代码库的支持
    • 1.0版本
    • 1.1发布
    • 2.0测试版/开发版
  • 支持多个“客户”代码库
  • 通过克隆标准代码库创建客户代码库的能力
  • 能够更改客户代码库中的标准代码
  • 能够使用新的标准版本更新客户代码库(并以某种方式标记来自客户代码库中更改的标准代码的冲突)
由于我们的团队仍然很小(~4个程序员),开发人员自己也应该很容易处理

顺便说一句,我们的软件是使用with构建的(因此,Eclipse插件也很好)

到目前为止,我研究过的所有风投公司似乎都有一个目标,即构建一个软件,而不是几个。我希望得到一些建议或最佳实践方法。

简单 只需获取git,执行pull请求过程,并利用一些GUI,支持此工作流

版本与定制开发有很大不同吗? 为了澄清,您所面临的情况是什么:“标准”开发有不同的版本,它们可能独立运行以进行维护,您可能需要从新版本中获得一些修复程序,以便合并到旧版本中,您需要一种解决热修复程序的方法

所有这些问题都通过git、hg或其他分布式版本控制系统得到了很好的解决。我从hg开始,但后来发现,git的使用频率更高,并且在标准安装中提供了所需的一切(对于某些hg特性来说,这是不可能的)

关于定制开发——事实上,它们在概念上与标准版本没有太大区别——您只需要对您的程序进行另一次修改,并以唯一的名称进行标识,这将最终表示,这些都是定制的东西

分支或拉请求过程? 现在如何处理不同版本和定制开发的不同“游动线”

分支工作流模型 显而易见的答案是“分支”。有很多关于各种分支模型的教程,它们将解决您的问题

然而,分支也不是微不足道的,您可能会发现关于什么样式是最好的样式的长期争论

主题回购和拉取请求工作流 幸运的是,还有更简单的解决方案——Pieter Hintjens关于“被认为有害的分支”的文章提供了更简单的模型,使用主题存储库和拉请求过程。这就是GitHub和BitBucket上管理的项目数量,我发现这确实是风险最小的最有效的解决方案

最后建议 对于pull请求工作流程,有一些支持相关通信的GUI是很方便的,除了GitHub和BitBucket之外,市场上还有一些解决方案(包括一些开源解决方案)


为长期运行做好准备-从Pieter Hintjens的链接文章开始,可能会缩短您的运行时间,下一步可能是在BitBucket上玩一个项目,然后设计“最终”系统(该系统无论如何会随着时间的推移而发展,但git回购非常适合跟上变化).

你不是在寻找分支机构吗?分支机构是我在过去20年中使用过的每一个vc系统提供的一种设施?我也问自己——我是否也有升级“普通老”分支机构的可能性?(创建分支机构A,在那里添加一些额外的东西,然后将所有东西从主分支机构运送到分支机构A,但保留这些额外的东西?)您告诉我们的任何事情都不会让我认为,使用您当前的风投进行分支并不是解决您当前问题的好(足够)方法。当然,您必须先做一些思考和工作,以使您的方法适合您的工具(和/或您的工具适合您的方法),并确保每个人都理解新的需求。如果你还没有风投,那么(a)淘气,淘气你,和(b)得到颠覆。就我个人而言,我不会用驳船码头去碰分布式风投。@HighPerformanceMark:现在我知道什么是驳船码头了。有趣的你,大概是SVN的长期超级用户,鼓励其他人使用风投,否则他们就是顽皮的-我同意。我鼓励您尝试一些分布式VCS。有很多优点(很容易克隆、合并,当你无法访问服务器时,有完整的历史记录),你可以欣赏这些优点,但这需要用手触摸。似乎,作为SVN或CVS的长期超级用户是采用分布式VCS的某种障碍。感谢您的介绍A和链接。我们目前正在使用mercurial,我将对“命名分支”进行更深入的研究。我们现在用不同的分支提出了以下解决方案:default(标准开发分支)、revision1.0(用于修复错误的标准开发分支)、revision1.1(用于修复错误的标准开发分支)、customerA(来自“revision1.0”的克隆)有一些变化)。现在,我们正在研究如何限制这些分支之间进行更改的方式,但我将就此发布一个不同的问题。+1用于创建foll