并行开发过程中的Maven版本控制

时间:2016-09-15 15:29:06

标签: maven svn versioning nexus

Maven版本化并行开发过程

我使用SVN与通常的主干和分支一起开展项目。 我有两个存储库,有两个不同的策略"发布"和"快照"。 该项目生成的工件可以从我公司的其他项目中使用。 我们暂时说我们的版本是1.0.1,所以在版本库中的Nexus我有工件-1.0.1.jar

当需要新功能时,我执行以下步骤:

  1. 从主干创建一个新分支,让我们从主干中说出feature_1所以我现在有分支/ feature_1
  2. 将版本增加到1.0.2-SNAPSHOT,在Nexus上我将 1.0.2-SNAPSHOT.jar
  3. 在1.0.2-SNAPSHOT发布之前,需要另一个功能,我将重复前面的步骤:

    1. 从主干创建一个新的分支让我们说来自trunk的feature_1所以我现在有分支/ feature_2
    2. 将版本增加到1.0.3-SNAPSHOT,在Nexus上我将 1.0.2-SNAPSHOT.jar 1.0.3-SNAPSHOT.jar
    3. 在某个阶段我需要feature_2才能上线,并执行以下步骤:

      1. 合并主干中的feature_2
      2. 在prod中部署并将工件1.0.3.jar推送到Nexus。
      3. 如果我没有正在进行的feature_1且版本为1.0.2-SNAPSHOT.jar,而发布版本为1.0.3,则该过程正常。

        不幸的是,功能分支不是顺序发布的。 在这种情况下如何管理版本控制?我错过了什么?

        我是否应该强制团队使用1.0.2-SNAPSHOT(feature_1)将trunk合并到branches / feature_1并将版本从1.0.2-SNAPSHOT增加到1.0.4-SNAPSHOT?

        听起来不对我。

1 个答案:

答案 0 :(得分:1)

只有主干应具有发布版本号,并且从分支合并应导致其增加。分支应该定期将trunk合并到它们中(每当它发生更改时),并且应该具有带有快照后缀的预期版本的版本号。

因此,prod是1.0,所以是trunk。功能1的目标是1.1版,功能2的目标是1.2版。功能1分支是1.1快照,功能2分支是1.2快照。如果一切按计划进行,则将功能1合并到主干,将版本号合并到1.1并释放,删除快照,并将主干合并到功能2分支中。功能2以类似的方式发布。

如果功能1迟到,则将功能2合并到主干,将主干的版本号合并到1.1,然后释放(删除快照),将主干合并到功能1,将版本合并到1.2快照(假设它现在定位到发布),并构建您的第一个快照。

您应该使用build-numbers或其他增量计数器作为版本号的后缀:1.0.0.4432。您正在使用svn,因此我建议使用svn中的修订版号作为最终部分,而不是内部版本号。

这里真正的问题是长寿分支。如果您真的想要处理大型功能,则应该调查功能标记。或者,研究较小的特征,以便很少发生这种情况,通过演化而不是革命逐步提供大型特征。我个人不喜欢功能标志,所以我更喜欢渐进式的方法。

一个相关的问题是你正在使用有时被称为“虚荣版本化”的东西真正的版本是svn中的版本号(这就是像我这样的老人有时称为svn的版本管理系统),其他一切都是在现实中并没有根据。这是IntelliJ和微软等公司停止使用它们并开始讨论发行年份和计数的一个原因 - 因此,IntelliJ 2016第3版目前处于EAP(测试版),我已经构建了163.4396这是一个虚荣号码(163 - 年份和发布)后面是他们CI的内部版本号。