Github版本控制:如何实现主分支与开发分支独立的标签序列?
解决Github Actions中正式版版本号独立递增的问题
核心思路
通过Git命令过滤出仓库中不带-develop后缀的最新正式标签,将其作为semantic-version action的起始版本,确保主分支版本基于正式版序列递增,不受开发分支标签干扰。
具体实现步骤
1. 获取最新正式标签
在主分支的Workflow中,先添加步骤获取仓库中最新的正式标签(排除所有带-develop后缀的标签),并去除标签前缀v(因为semantic-version的starting_version参数不需要前缀)。
2. 基于正式标签递增版本
将获取到的正式版本号传入semantic-version的starting_version参数,让action基于该版本号按照语义化规则递增。
完整主分支Workflow代码
steps: - uses: actions/checkout@v3 with: ref: main fetch-depth: 0 # 必须拉取全量历史才能获取所有标签 - name: Get latest stable tag id: get_stable_tag run: | # 过滤出所有v开头、不带-develop后缀的标签,按版本号排序后取最后一个 STABLE_TAG=$(git tag -l "v*" | grep -v "-develop" | sort -V | tail -n1) # 如果没有正式标签,初始版本设为0.0.0 if [ -z "$STABLE_TAG" ]; then echo "stable_tag=0.0.0" >> $GITHUB_OUTPUT else # 去掉标签的v前缀,传递给semantic-version echo "stable_tag=${STABLE_TAG#v}" >> $GITHUB_OUTPUT fi - name: Bump stable version uses: PaulHatch/semantic-version@v4.0.2 id: tag_version_main with: tag_prefix: "v" major_pattern: "BREAKING CHANGE" minor_pattern: "feat:" format: "${major}.${minor}.${patch}" starting_version: ${{ steps.get_stable_tag.outputs.stable_tag }} change_path: "." short_tags: false bump_each_commit: true - name: Tag Release (vX.Y.Z) run: | git tag ${{ steps.tag_version_main.outputs.version_tag }} git push origin ${{ steps.tag_version_main.outputs.version_tag }}
关键说明
fetch-depth: 0:必须设置该参数,否则无法拉取仓库所有历史标签。- 标签过滤逻辑:
git tag -l "v*" | grep -v "-develop" | sort -V | tail -n1通过grep -v排除开发分支标签,sort -V按版本号自然排序,确保取到最新的正式标签。 - 初始版本处理:当仓库还没有正式标签时,自动使用
0.0.0作为起始版本,避免action报错。
内容的提问来源于stack exchange,提问作者Donagh
相关产品推荐
相关产品推荐

