GitHub多PR并行提交时如何保证OpenAPI版本号连续递增?
解决多PR并行升级OpenAPI版本号重复的问题
问题背景
两位开发者基于同一develop分支提交独立PR,均需升级同一OpenAPI文档的版本号。由于初始版本一致,第二个PR合并时不会触发代码冲突,最终导致版本号重复(两人都提交1.123.0),而非期望的依次递增(1.123.0 → 1.124.0)。
实用解决方案
1. CI/CD集成自动版本递增脚本
在仓库中编写自动化脚本,负责拉取最新分支代码、解析当前版本号、自动递增修订段,并更新OpenAPI文件,将其集成到PR流程中:
- 脚本逻辑示例(基于Bash和yq工具):
# 拉取develop分支最新代码 git fetch origin develop git merge origin develop --no-edit # 读取当前OpenAPI版本号 CURRENT_VER=$(yq eval '.info.version' openapi.yaml) # 拆分版本段并递增修订号 IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VER" NEW_MINOR=$((MINOR + 1)) NEW_VER="$MAJOR.$NEW_MINOR.$PATCH" # 更新文件中的版本号 yq eval ".info.version = \"$NEW_VER\"" -i openapi.yaml # 提交并推送更新 git add openapi.yaml git commit -m "Auto-increment version to $NEW_VER" git push - 配置CI(如GitHub Actions)在PR创建或标记为可合并时自动执行该脚本,确保PR分支的版本号始终基于最新
develop分支递增。
2. PR合并前强制同步+版本校验
- 制定团队规则:要求开发者在准备合并PR前,必须先将
develop分支的最新代码合并到自己的PR分支,此时若发现版本号已被他人更新,需手动重新递增后再提交。 - 配合CI校验步骤:在PR的CI流程中添加版本号检查逻辑,对比PR分支的版本号与
develop分支的最新版本号,若PR版本号不大于develop版本号,直接标记PR为失败,强制开发者更新版本号。
3. 集中式版本号管理
将所有OpenAPI文档的版本号统一存储到单独的配置文件(如openapi-versions.cfg),而非分散在每个OpenAPI文件中:
- 若OpenAPI工具支持模板渲染,让所有文档引用该配置文件的版本变量;若不支持,通过构建脚本在发布阶段自动将最新版本号注入到所有OpenAPI文件中。
- 这种方式会让版本号修改集中在单一文件,多PR并行修改时直接触发代码冲突,迫使第二个开发者解决冲突时基于最新版本号递增,从根源避免重复。
4. 使用合并队列按序合并
启用仓库的合并队列功能(如GitHub Merge Queue),将待合并PR放入队列:
- 队列会自动将每个PR与最新的
develop分支进行合并测试,若版本号未基于最新版本递增,测试失败并提示开发者更新;测试通过后按顺序合并,确保版本号依次递增。
内容的提问来源于stack exchange,提问作者Baz
相关产品推荐
相关产品推荐

