修正最新tag检查方式。

This commit is contained in:
2026-01-24 20:10:51 +08:00
parent fa9a0ea04e
commit 871d92daa4

View File

@@ -14,36 +14,28 @@ git restore . >/dev/null 2>&1
# 切main分支无论是否已在main都正常继续仅真失败才退出
echo "切换到main分支..."
git checkout main 2>/dev/null
git checkout main >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "错误切换main分支失败终止执行"
exit 1
fi
# 拉取远程main分支最新代码(放弃静默,保留关键错误输出,--rebase前先fetch保证远程信息最新
echo "拉取远程main分支最新代码..."
git fetch origin main 2>&1
git pull origin main --rebase 2>&1
# 拉取main分支最新代码+远程所有tag核心同步最新代码和tag
echo "拉取main分支最新代码..."
git pull origin main --rebase >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "错误拉取main分支最新代码失败终止执行"
exit 1
fi
# 核心修复:拉取远程所有tag本地同步远程最新tag解决无法获取最新tag问题
echo "拉取远程所有tag同步本地tag库..."
git fetch origin --tags 2>&1
if [ $? -ne 0 ]; then
echo "警告拉取远程tag失败将使用本地已有tag继续执行"
fi
# 拉取远程所有tag确保本地有最新tag关键补充
echo "同步远程最新tag..."
git fetch origin --tags >/dev/null 2>&1
# 优先取HEAD关联tag无则取仓库最近tag本地已同步远程保证是最新
# 【核心修复】直接获取仓库最新tag按提交时间排序删除HEAD关联tag的优先逻辑
get_latest_tag() {
# 优先取当前HEAD直接关联的tag精准
local head_tag=$(git log -1 --pretty=format:%D 2>/dev/null | grep -o 'tag: [^, ]*' | awk -F': ' '{print $2}')
[ -n "$head_tag" ] && { echo "$head_tag"; return 0; }
# 无则取仓库最新tag按提交时间排序而非字母序解决tag命名不规范导致的取错问题
local latest_tag=$(git tag -l | xargs -I {} git log -1 --format=%ai {} | sort -r | head -n1 | awk '{print $NF}')
# 按提交时间倒序取最新tag兼容v1.0.8、v1.0.9命名格式
local latest_tag=$(git tag -l | sort -V | tail -n1 2>/dev/null || true)
[ -n "$latest_tag" ] && { echo "$latest_tag"; return 0; }
echo "no_tag" && return 1
@@ -52,26 +44,19 @@ get_latest_tag() {
# 获取并校验tag无tag直接退出
latest_tag=$(get_latest_tag)
if [ "$latest_tag" = "no_tag" ]; then
echo "错误仓库无任何tag(本地+远程),终止执行"
echo "错误仓库无任何tag终止执行"
exit 1
fi
echo "获取到最新目标tag$latest_tag"
# 切换tag保留错误输出,失败退出
# 切换tag失败退出
echo "切换至tag $latest_tag..."
git checkout "$latest_tag" 2>&1
git checkout "$latest_tag" >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "错误切换至tag $latest_tag失败,终止执行"
exit 1
fi
# 核心增强校验是否真的切换到目标tag防止tag名存在但HEAD不匹配
current_tag=$(git describe --tags --exact-match HEAD 2>/dev/null || true)
if [ "$current_tag" != "$latest_tag" ]; then
echo "错误切换tag后HEAD不匹配实际当前tag$current_tag目标tag$latest_tag"
exit 1
fi
# 执行构建脚本,失败直接退出
echo "执行构建脚本..."
bash bash/build_class.sh