在GitHub Actions工作流中筛选Git发布分支的方法
在GitHub Workflows中筛选并排序最新的release分支
完全可以实现你需要的操作,以下是具体的Workflow配置示例,通过Shell命令结合Git完成分支筛选、排序和截取:
name: 获取最新Release分支 on: [workflow_dispatch] # 可根据需求替换为push、schedule等触发条件 jobs: process-release-branches: runs-on: ubuntu-latest steps: - name: 拉取完整仓库代码 uses: actions/checkout@v4 with: fetch-depth: 0 # 必须设置为0,才能拉取所有远程分支信息 - name: 筛选、排序并提取前5个Release分支 id: extract_branches run: | # 1. 列出所有远程分支 → 2. 筛选release开头的分支 → 3. 移除origin/前缀 → 4. 按版本号降序排序 → 5. 取前5个 filtered_branches=$(git branch -r | grep "origin/release-" | sed 's/origin\///' | sort -Vr | head -n 5) # 将分支列表转为换行分隔的格式,存入GitHub输出变量 echo "latest_branches<<EOF" >> $GITHUB_OUTPUT echo "$filtered_branches" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: 输出结果 run: | echo "最新的5个Release分支(降序排列):" echo "${{ steps.extract_branches.outputs.latest_branches }}"
关键步骤说明:
- 拉取完整仓库:
fetch-depth: 0是必须的,默认情况下GitHub Actions只拉取当前分支的最新提交,无法获取所有远程分支信息。 - 分支筛选与排序:
git branch -r:列出所有远程分支grep "origin/release-":精准筛选以release-开头的远程分支sed 's/origin\///':移除分支名前的origin/前缀,得到纯分支名称sort -Vr:-V参数会按版本号规则排序(自动识别yyyy.m中的数字大小),-r表示降序排列,确保最新的分支排在最前面head -n 5:截取排序后的前5个分支
- 输出变量:将处理后的分支列表存入
GITHUB_OUTPUT,方便后续步骤(比如部署)直接调用。
注意事项:
确保你的分支命名严格遵循release-yyyy.m格式(如release-2024.1、release-2024.10),sort -V才能正确识别版本顺序。如果有不符合格式的分支,可能会导致排序异常。
内容的提问来源于stack exchange,提问作者user786045
相关产品推荐
相关产品推荐

