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

如何从Git分支层级列表中获取各主版本的最新分支

解决方案

一、使用Git命令直接实现

可以通过组合Git命令和文本处理工具快速得到每个主版本的最新分支,无需额外代码开发:

git branch --list 'Branch_*' | sed 's/^[ *]//' | awk -F'[_.]' '{printf "%s.%s %s.%s.%s %s\n", $2, $3, $2, $3, $4, $0}' | sort -k1,1 -k2,2nr | awk '!seen[$1]++ {print $3}'

命令拆解:

  • git branch --list 'Branch_*':筛选出所有以Branch_开头的分支
  • sed 's/^[ *]//':移除分支名称前的当前分支标记*或空格
  • awk -F'[_.]':将分支名按_和.拆分,提取主版本(如100.0)、完整版本号和原分支名
  • sort -k1,1 -k2,2nr:先按主版本分组排序,同一主版本内按完整版本号降序排列
  • awk '!seen[$1]++ {print $3}':通过去重逻辑,只保留每个主版本的第一个分支(即最新分支)

二、C#代码实现(基于已获取的分支列表)

如果已经在C#中拿到了分支列表,利用.NET自带的Version类可以高效完成分组和筛选:

// 假设已获取的分支列表为List<string> branchList
var latestMainVersionBranches = branchList
    // 过滤符合命名规则的分支
    .Where(branch => branch.StartsWith("Branch_", StringComparison.OrdinalIgnoreCase))
    // 解析分支名到版本对象和原分支名
    .Select(branch => 
    {
        string versionStr = branch.Substring("Branch_".Length);
        // 可添加格式校验,避免解析失败
        if (Version.TryParse(versionStr, out Version? version))
        {
            return new { BranchName = branch, Version = version };
        }
        return null;
    })
    .Where(item => item != null)
    // 按主版本(Major + Minor)分组
    .GroupBy(item => new { item.Version.Major, item.Version.Minor })
    // 每组取版本号最大的分支
    .Select(group => group.OrderByDescending(item => item.Version).First().BranchName)
    .ToList();

代码说明:

  1. 过滤与解析:先筛选出符合命名规则的分支,将版本部分解析为Version对象(该类内置了版本号比较逻辑)
  2. 分组:以Major和Minor组成的主版本作为分组依据
  3. 筛选最新分支:每个分组内按版本号降序排序,取第一个元素即为该主版本的最新分支

内容的提问来源于stack exchange,提问作者Ron8320

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:12:22