version_utils.sh
文档编写日期: 2026-03-20
使用办法 (Usage)
加载方式
source scripts/release/hooks/version_utils.sh
Scripts详解
脚本用途
为Git钩子提供版本号解析、验证级别检测和Git版本信息获取功能。
提供的函数
版本解析
| 函数 |
说明 |
示例 |
| get_major_version() |
获取主版本号 |
1.2.3 -> 1 |
| get_minor_version() |
获取次版本号 |
1.2.3 -> 2 |
| get_patch_version() |
获取补丁版本号 |
1.2.3 -> 3 |
验证级别
| 函数 |
说明 |
| determine_verify_level() |
根据本地和远程版本号确定验证级别 |
| get_verify_level_description() |
获取验证级别的描述信息 |
Git集成
| 函数 |
说明 |
| get_local_version() |
获取当前分支最近的版本标签 |
| get_remote_version() |
获取远程main分支最近的版本标签 |
| get_cmake_version() |
从CMakeLists.txt获取版本号 |
| get_remote_cmake_version() |
从远程分支的CMakeLists.txt获取版本号 |
调试辅助
| 函数 |
说明 |
| print_version_info() |
打印版本信息(用于调试) |
验证级别规则
determine_verify_level() 函数比较本地版本和远程版本,返回以下级别:
| 级别 |
条件 |
说明 |
| major |
主版本号不同 |
X64 + ARM64 完整构建 + 测试 |
| minor |
主版本相同,次版本不同 |
X64 完整构建 + 测试 |
| patch |
主、次版本相同 |
X64 快速构建 + 测试 |
函数参数说明
determine_verify_level
determine_verify_level <local_version> <remote_version>
- 参数1: 本地版本号(如 1.2.3)
- 参数2: 远程版本号(如 1.1.0)
- 返回: major, minor, 或 patch
- 默认值: 空版本号会被处理为 0.0.0
get_cmake_version
get_cmake_version <project_root>
- 参数1: 项目根目录路径
- 返回: CMakeLists.txt中的版本号(提取 VERSION x.y.z 格式)
- 失败: 返回空字符串
get_remote_cmake_version
get_remote_cmake_version [remote_branch]
- 参数1: 远程分支名(默认: origin/main)
- 返回: 远程CMakeLists.txt中的版本号
- 失败: 返回空字符串
Git版本获取说明
- get_local_version(): 使用
git describe --tags --abbrev=0
- get_remote_version(): 先fetch远程信息,然后获取远程main分支的标签
使用示例
# 加载工具库
source scripts/release/hooks/version_utils.sh
# 解析版本
VERSION="1.2.3"
echo $(get_major_version "$VERSION") # 输出: 1
echo $(get_minor_version "$VERSION") # 输出: 2
echo $(get_patch_version "$VERSION") # 输出: 3
# 确定验证级别
LOCAL="1.2.3"
REMOTE="1.1.0"
LEVEL=$(determine_verify_level "$LOCAL" "$REMOTE")
echo "$LEVEL" # 输出: minor
# 获取描述
echo "$(get_verify_level_description "$LEVEL")"
# 输出: Minor 版本变更: X64 完整构建 + 测试
# 获取CMake版本
CMAKE_VER=$(get_cmake_version "/path/to/project")
echo "$CMAKE_VER" # 输出: x.y.z
相关文件
/home/charliechen/CFDesktop/scripts/release/hooks/version_utils.sh
/home/charliechen/CFDesktop/CMakeLists.txt