You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置GitVersion实现master、dev、hotfix分支的程序集版本自动更新

Azure DevOps中GitVersion自动版本控制配置优化方案

问题背景

在Azure DevOps流水线中使用GitVersion实现部署自动化,但无法按预期完成自动版本控制,且当前依赖Git标签的流程需要运行两次流水线才能获取正确版本号,希望优化配置避免该问题。

分支结构

  • master:主分支,生产版本发布源
  • dev:承载当前开发版本
  • hotfix*:从master创建的短期热修复分支,命名格式如hotfix-bug#99999
  • 开发分支:从dev创建,无固定命名规范,完成后合并回dev

期望的版本更新规则

  • 任意分支向dev发起Pull Request:生成预发布版本(例如1.0.0 → 1.0.0-something)
  • dev向master发起Pull Request:升级Minor版本(例如1.0.0 → 1.1.0)
  • 任意hotfix分支向master发起Pull Request:升级Patch版本(例如1.0.0 → 1.0.1)

当前痛点

当前流程需要手动打标签并重新运行流水线:

  1. 完成Pull Request后触发流水线
  2. 本地拉取PR变更,为最新提交打版本标签(如1.1.0)
  3. 推送标签后重新运行流水线,GitVersion才能获取正确版本号

当前GitVersion.yml配置

assembly-versioning-scheme: MajorMinorPatch
assembly-file-versioning-scheme: MajorMinorPatch
mode: ContinuousDelivery
tag-prefix: '[vV]'
continuous-delivery-fallback-tag: ci
major-version-bump-message: '\+semver:\s?(breaking|major)'
minor-version-bump-message: '\+semver:\s?(feature|minor)'
patch-version-bump-message: '\+semver:\s?(fix|patch)'
no-bump-message: '\+semver:\s?(none|skip)'
legacy-semver-padding: 4
build-metadata-padding: 4
commits-since-version-source-padding: 4
tag-pre-release-weight: 60000
commit-message-incrementing: Enabled
branches:
  develop:
    mode: ContinuousDeployment
    tag: alpha
    increment: Minor
    prevent-increment-of-merged-branch-version: false
    track-merge-target: true
    regex: ^dev(elop)?(ment)?$
    source-branches: []
    tracks-release-branches: true
    is-release-branch: false
    is-mainline: false
    pre-release-weight: 0
  main:
    mode: ContinuousDelivery
    tag: ''
    increment: Patch
    prevent-increment-of-merged-branch-version: true
    track-merge-target: false
    regex: ^master$|^main$
    source-branches:
    - develop
    - release
    tracks-release-branches: false
    is-release-branch: false
    is-mainline: true
    pre-release-weight: 55000
  release:
    mode: ContinuousDelivery
    tag: beta
    increment: None
    prevent-increment-of-merged-branch-version: true
    track-merge-target: false
    regex: ^releases?[/-]
    source-branches:
    - develop
    - main
    - support
    - release
    tracks-release-branches: false
    is-release-branch: true
    is-mainline: false
    pre-release-weight: 30000
  feature:
    mode: ContinuousDelivery
    tag: '{BranchName}'
    increment: Inherit
    regex: ^features?[/-]
    source-branches:
    - develop
    - main
    - release
    - feature
    - support
    - hotfix
    pre-release-weight: 30000
  hotfix:
    mode: ContinuousDelivery
    tag: beta
    increment: Patch
    prevent-increment-of-merged-branch-version: false
    track-merge-target: false
    regex: ^hotfix(es)?[/-]
    source-branches:
    - release
    - main
    - support
    - hotfix
    tracks-release-branches: false
    is-release-branch: false
    is-mainline: false
    pre-release-weight: 30000
ignore:
  sha: []
increment: Inherit
commit-date-format: yyyy-MM-dd
merge-message-formats: {}
update-build-number: true

优化后的GitVersion.yml配置

针对需求调整配置如下,核心是利用track-merge-target和分支合并逻辑实现自动版本递增,无需依赖手动打标签:

assembly-versioning-scheme: MajorMinorPatch
assembly-file-versioning-scheme: MajorMinorPatch
# 全局使用ContinuousDeployment模式,无需依赖标签触发版本正式化
mode: ContinuousDeployment
tag-prefix: '[vV]'
continuous-delivery-fallback-tag: ci
major-version-bump-message: '\+semver:\s?(breaking|major)'
minor-version-bump-message: '\+semver:\s?(feature|minor)'
patch-version-bump-message: '\+semver:\s?(fix|patch)'
no-bump-message: '\+semver:\s?(none|skip)'
legacy-semver-padding: 4
build-metadata-padding: 4
commits-since-version-source-padding: 4
tag-pre-release-weight: 60000
commit-message-incrementing: Enabled
branches:
  develop:
    mode: ContinuousDeployment
    tag: alpha
    # dev分支默认递增Minor,合并开发分支时继承版本并生成预发布后缀
    increment: Minor
    prevent-increment-of-merged-branch-version: true
    # 开启跟踪合并目标,确保PR到dev时基于dev的当前版本生成预发布版
    track-merge-target: true
    regex: ^dev(elop)?(ment)?$
    source-branches:
      - feature
      - hotfix
    tracks-release-branches: true
    is-release-branch: false
    is-mainline: false
    pre-release-weight: 0
  main:
    mode: ContinuousDeployment
    tag: ''
    # 默认不自动递增,依赖合并来源分支的规则触发版本变更
    increment: None
    prevent-increment-of-merged-branch-version: false
    # 开启跟踪合并目标,识别合并来源分支类型来决定版本递增规则
    track-merge-target: true
    regex: ^master$|^main$
    source-branches:
      - develop
      - hotfix
    tracks-release-branches: false
    is-release-branch: false
    is-mainline: true
    pre-release-weight: 55000
  hotfix:
    mode: ContinuousDeployment
    tag: hotfix
    increment: Patch
    prevent-increment-of-merged-branch-version: true
    track-merge-target: true
    # 匹配hotfix-bug#xxx格式的分支
    regex: ^hotfix-
    source-branches:
      - main
    tracks-release-branches: false
    is-release-branch: false
    is-mainline: false
    pre-release-weight: 40000
  feature:
    mode: ContinuousDeployment
    tag: feature-{BranchName}
    increment: Inherit
    # 匹配所有从dev创建的开发分支(无固定命名)
    regex: ^(?!master|dev|hotfix).*$
    source-branches:
      - develop
    pre-release-weight: 30000
ignore:
  sha: []
increment: Inherit
commit-date-format: yyyy-MM-dd
merge-message-formats: {}
update-build-number: true

配置说明

  1. 全局模式调整:将全局mode改为ContinuousDeployment,无需依赖标签即可生成带预发布后缀的版本,避免手动打标签的二次流水线运行。
  2. dev分支配置:
    • 开启track-merge-target: true,当开发分支PR到dev时,基于dev的当前版本生成1.0.0-alpha.x格式的预发布版本。
    • 设置prevent-increment-of-merged-branch-version: true,避免合并开发分支时意外递增dev的版本号,保持dev版本由自身提交或合并触发递增。
  3. main分支配置:
    • 设置increment: None,版本递增完全由合并的来源分支决定:
      • 合并dev分支时,GitVersion会识别dev的Minor递增规则,自动将main版本从1.0.0升级为1.1.0。
      • 合并hotfix分支时,识别hotfix的Patch递增规则,自动将main版本从1.0.0升级为1.0.1。
    • 开启track-merge-target: true,确保正确识别合并来源分支的版本规则。
  4. hotfix分支配置:
    • 调整regex匹配hotfix-开头的分支,适配hotfix-bug#99999的命名格式。
    • 设置increment: Patch,确保hotfix分支自身的预发布版本为1.0.1-hotfix.x,合并到main时触发Patch版本升级。
  5. 开发分支配置:
    • 调整regex匹配除master、dev、hotfix外的所有分支,适配无固定命名的开发分支需求。
    • 设置increment: Inherit,继承dev的版本号,生成1.0.0-feature-xxx.x格式的预发布版本,PR到dev时自动整合为dev的预发布版本。

内容的提问来源于stack exchange,提问作者WSC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:05:55