改进服务器端Tag源码更新脚本。
This commit is contained in:
@@ -14,26 +14,36 @@ git restore . >/dev/null 2>&1
|
||||
|
||||
# 切main分支:无论是否已在main,都正常继续,仅真失败才退出
|
||||
echo "切换到main分支..."
|
||||
git checkout main >/dev/null 2>&1
|
||||
git checkout main 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误:切换main分支失败,终止执行"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 拉最新代码:已最新/拉取成功都继续,拉取失败才退出(彻底兼容所有场景)
|
||||
echo "拉取main分支最新代码..."
|
||||
git pull origin main --rebase >/dev/null 2>&1
|
||||
# 拉取远程main分支最新代码(放弃静默,保留关键错误输出,--rebase前先fetch保证远程信息最新)
|
||||
echo "拉取远程main分支最新代码..."
|
||||
git fetch origin main 2>&1
|
||||
git pull origin main --rebase 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误:拉取main分支最新代码失败,终止执行"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 优先取HEAD关联tag,无则取仓库最近tag
|
||||
# 核心修复:拉取远程所有tag(本地同步远程最新tag,解决无法获取最新tag问题)
|
||||
echo "拉取远程所有tag,同步本地tag库..."
|
||||
git fetch origin --tags 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "警告:拉取远程tag失败,将使用本地已有tag继续执行"
|
||||
fi
|
||||
|
||||
# 优先取HEAD关联tag,无则取仓库最近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; }
|
||||
|
||||
local latest_tag=$(git describe --tags --abbrev=0 2>/dev/null || true)
|
||||
# 无则取仓库最新tag(按提交时间排序,而非字母序,解决tag命名不规范导致的取错问题)
|
||||
local latest_tag=$(git tag -l | xargs -I {} git log -1 --format=%ai {} | sort -r | head -n1 | awk '{print $NF}')
|
||||
[ -n "$latest_tag" ] && { echo "$latest_tag"; return 0; }
|
||||
|
||||
echo "no_tag" && return 1
|
||||
@@ -42,19 +52,26 @@ 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"
|
||||
echo "获取到最新目标tag:$latest_tag"
|
||||
|
||||
# 切换tag,失败退出
|
||||
# 切换tag,保留错误输出,失败退出
|
||||
echo "切换至tag $latest_tag..."
|
||||
git checkout "$latest_tag" >/dev/null 2>&1
|
||||
git checkout "$latest_tag" 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
|
||||
@@ -66,5 +83,5 @@ fi
|
||||
# 确保config目录存在,写入tag信息
|
||||
mkdir -p config >/dev/null 2>&1
|
||||
echo "$latest_tag" > config/version.flags
|
||||
echo "✅ 全部操作完成!tag已写入config/version.flags"
|
||||
echo "✅ 全部操作完成!最新tag[$latest_tag]已写入config/version.flags"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user