如何从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();
代码说明:
- 过滤与解析:先筛选出符合命名规则的分支,将版本部分解析为
Version对象(该类内置了版本号比较逻辑) - 分组:以
Major和Minor组成的主版本作为分组依据 - 筛选最新分支:每个分组内按版本号降序排序,取第一个元素即为该主版本的最新分支
内容的提问来源于stack exchange,提问作者Ron8320
相关产品推荐
相关产品推荐

