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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:24:30