如何配置GitVersion实现稳定主分支与预发布特性分支的补丁递增
问题分析
当前配置存在几个核心问题:
ContinuousDelivery模式下,主分支无对应版本标签时会自动生成预发布后缀;- 特性分支的正则表达式转义错误,导致无法正确捕获分支名生成预发布标签;
- 版本源识别混乱(仓库中存在多个重复/格式不一致的标签);
- 分支递增规则未明确强制补丁版本递增。
调整后的完整配置
assembly-versioning-scheme: MajorMinorPatch assembly-file-versioning-scheme: MajorMinorPatch mode: Mainline # 适配GitLab Flow的合并工作流 increment: Patch # 全局默认递增补丁版本 tag-prefix: 'v' # 统一版本标签前缀,避免识别混乱 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) commit-message-incrementing: Enabled branches: main: regex: ^main$ label: '' increment: Patch is-main-branch: true pre-release-label: '' # 强制生成无预发布后缀的稳定版本 track-merge-message: true pre-release-weight: 0 feature: regex: ^feature[/-](?<BranchName>.+)$ # 修正正则,正确捕获分支名 mode: ContinuousDelivery label: '{BranchName}' increment: Patch # 明确特性分支递增补丁版本 source-branches: - main pre-release-weight: 30000 test: regex: ^test$ mode: ContinuousDelivery label: test increment: Patch # 测试分支同样递增补丁版本 source-branches: - main - feature pre-release-weight: 35000 ignore: sha: []
关键修改说明
切换到Mainline模式
该模式专门针对GitLab Flow这类基于合并的工作流,会自动跟踪合并到主分支的提交递增版本,避免无标签时生成预发布后缀。全局强制补丁递增
设置increment: Patch确保所有分支默认都递增补丁版本,直接满足“所有分支均递增补丁版本”的需求。统一标签前缀
仓库中存在1.89.0、v1.89.3等格式混乱的标签,设置tag-prefix: 'v'后,GitVersion只会识别v开头的有效版本标签,解决版本源识别歧义问题。修正特性分支正则
原配置中(?<BranchName>.+)的转义错误,改为(?<BranchName>.+)后可正确捕获特性分支名称(如first),生成-first格式的预发布标签。主分支强制稳定版本
添加pre-release-label: '',确保主分支无论是否有新提交,都不会生成预发布后缀,始终输出1.89.0、1.89.1这类稳定版本。
额外建议
清理仓库中重复/冲突的版本标签(如v1.89.2、v1.89.3这类与1.89.0冲突的标签),避免GitVersion在识别版本基准时出现异常。
验证步骤
- 主分支运行
dotnet-gitversion,应输出无预发布后缀的稳定版本(如1.89.1); features/first分支运行,应输出1.89.1-first.0,后续提交递增为1.89.1-first.1;- 特性分支合并到主分支后,主分支版本自动递增为
1.89.2。
内容的提问来源于stack exchange,提问作者Daniil Basanets
相关产品推荐
相关产品推荐

