From 3707891e0b9467326320264cef9bd67f9db5b04e Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 17 May 2026 15:17:40 +0800 Subject: [PATCH] =?UTF-8?q?1.=C2=A0=E8=B0=83=E7=94=A8=E5=87=BD=E6=95=B0=20?= =?UTF-8?q?=E2=86=92=20=E6=9F=A5=E5=87=BA=E6=A8=A1=E5=9D=97=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=20+=20=E6=A0=87=E7=AD=BE=E7=BB=91=E5=AE=9A=E6=8F=90?= =?UTF-8?q?=E4=BA=A4Commit=E5=93=88=E5=B8=8C=20=E2=80=8B=202.=C2=A0?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E6=A0=87=E7=AD=BE/Commit=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E8=B7=B3=E8=BF=87=20=E2=80=8B=203.=C2=A0?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=91=BD=E4=BB=A4=EF=BC=9A=C2=A0git=20checko?= =?UTF-8?q?ut=20origin/=E6=A8=A1=E5=9D=97=E5=90=8D=20=20commit=E5=93=88?= =?UTF-8?q?=E5=B8=8C:=E6=A8=A1=E5=9D=97=E6=96=87=E4=BB=B6=E5=A4=B9=20?= =?UTF-8?q?=E2=80=8B=204.=C2=A0=E4=BB=85=E6=B7=BB=E5=8A=A0=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E6=A8=A1=E5=9D=97=E7=9B=AE=E5=BD=95=EF=BC=8C=E7=B2=BE?= =?UTF-8?q?=E5=87=86=E6=8F=90=E4=BA=A4=20=E2=80=8B=205.=C2=A0=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=97=A5=E5=BF=97=E5=90=8C=E6=97=B6=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E5=90=8D+=E6=8F=90=E4=BA=A4=E5=93=88?= =?UTF-8?q?=E5=B8=8C=EF=BC=8C=E6=96=B9=E4=BE=BF=E5=9B=9E=E6=BA=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ashMergeProjects-to-Projects_Keeper_Tag.sh | 81 ++++++++++--------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh b/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh index fe4f17b..e2b546f 100644 --- a/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh +++ b/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh @@ -1,37 +1,34 @@ #!/system/bin/sh -## 合并远程指定版本标签下模块文件夹到本地 projects_keeper_tag 分支 +## 合并远程模块指定标签对应提交点文件夹到本地 projects_keeper_tag 分支 -# ====================== 获取模块对应远程版本标签 ====================== -get_module_latest_tag() { +# ====================== 获取模块标签与对应Commit ====================== +get_module_tag_commit() { local module_dir="$1" local remote_branch="origin/${module_dir}" - # 强制拉取远程分支+全部远程标签到本地 - git fetch origin "$module_dir" - git fetch origin --tags + git fetch origin "$module_dir" 2>/dev/null + git fetch origin --tags 2>/dev/null - # 获取远程分支最新提交哈希 + # 获取远程分支最新commit local latest_commit latest_commit=$(git log -1 --pretty=format:%H "$remote_branch" 2>/dev/null) - # 调试信息输出到错误流,不污染返回值 - echo " 调试:模块[$module_dir] 远程最新Commit = $latest_commit" >&2 + echo " 调试:模块[$module_dir] 远程分支最新Commit = $latest_commit" >&2 if [ -z "$latest_commit" ]; then - echo " 调试:无有效提交" >&2 echo "" return fi - # 匹配 模块名-xxx 格式标签,绑定对应commit - local tag_val - tag_val=$(git ls-remote --tags origin "${module_dir}-*" 2>/dev/null \ + # 匹配模块名-开头标签,取出标签名 + local target_tag + target_tag=$(git ls-remote --tags origin "${module_dir}-*" 2>/dev/null \ | grep -v '\^{}' \ | awk -v cm="$latest_commit" '$1==cm{print $2}' \ | sed 's/refs\/tags\///') - # 纯净返回标签字符串 - echo "$tag_val" + # 输出格式:标签名|commit哈希 + echo "${target_tag}|${latest_commit}" } # ====================== 进入工作目录 ====================== @@ -42,7 +39,7 @@ if ! cd "$TARGET_DIR"; then exit 1 fi -# ====================== 同步远程代码与所有标签 ====================== +# ====================== 同步远程代码与标签 ====================== echo "==============================================" echo "同步远程代码及全部版本标签" echo "==============================================" @@ -51,7 +48,7 @@ git fetch origin --tags echo "同步完成" echo "" -# ====================== 强制锁定本地分支 ====================== +# ====================== 锁定目标分支 ====================== CUR_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) TARGET_BRANCH="projects_keeper_tag" if [ "$CUR_BRANCH" != "$TARGET_BRANCH" ]; then @@ -59,7 +56,7 @@ if [ "$CUR_BRANCH" != "$TARGET_BRANCH" ]; then exit 1 fi -# ====================== 目录校验数组(保留原样) ====================== +# ====================== 目录结构校验 ====================== MERGE_OBJECTS_LIST=( .git .gitignore @@ -138,47 +135,53 @@ check_diff() { check_diff # ====================== 开始合并模块 ====================== -echo -e "#@@@ 开始合并标签版本模块源码 @@@#" +echo -e "#@@@ 开始按标签对应提交点合并模块 @@@#" ## 合并应用型模块 MERGE_APP_PROJECT_LIST=(DemoAPP) -echo -e "#@@@ 应用型模块开始合并 @@#" +echo -e "#@@@ 应用型模块合并开始 @@#" for item in "${MERGE_APP_PROJECT_LIST[@]}"; do item_lower=$(echo "$item" | tr 'A-Z' 'a-z') - MOD_TAG=$(get_module_latest_tag "$item_lower") + tag_info=$(get_module_tag_commit "$item_lower") - # 无标签直接跳过,不执行任何操作 - if [ -z "$MOD_TAG" ]; then - echo "跳过 $item_lower 未匹配对应版本标签" + # 分割 标签名 和 commit哈希 + MOD_TAG=${tag_info%%|*} + MOD_COMMIT=${tag_info##*|} + + if [ -z "$MOD_TAG" ] || [ -z "$MOD_COMMIT" ]; then + echo "跳过 $item_lower 未匹配有效标签与提交点" continue fi - echo "正在合并 $item_lower 标签版本:$MOD_TAG" - # 从远程标签拉取文件夹覆盖到本地 - git checkout origin/tags/"$MOD_TAG" -- "$item_lower" - # 仅添加当前模块文件,不全局add - git add "$item_lower" - git commit -m "合并模块 $item ,来源版本标签:$MOD_TAG" + echo "模块:$item_lower 标签:$MOD_TAG 对应提交点:$MOD_COMMIT" + # 核心:从远程模块分支 指定commit拉取对应文件夹 + git checkout "origin/${item_lower}" "${MOD_COMMIT}:${item_lower}" + git add "${item_lower}" + git commit -m "合并模块 $item ,来源标签:$MOD_TAG 提交点:$MOD_COMMIT" done ## 合并类库模块 MERGE_LIB_PROJECT_LIST=(WinBoLL APPBase AES) -echo -e "#@@@ 类库模块开始合并 @@#" +echo -e "#@@@ 类库模块合并开始 @@#" for item in "${MERGE_LIB_PROJECT_LIST[@]}"; do item_lower=$(echo "$item" | tr 'A-Z' 'a-z') - MOD_TAG=$(get_module_latest_tag "$item_lower") + tag_info=$(get_module_tag_commit "$item_lower") - if [ -z "$MOD_TAG" ]; then - echo "跳过 $item_lower 未匹配对应版本标签" + MOD_TAG=${tag_info%%|*} + MOD_COMMIT=${tag_info##*|} + + if [ -z "$MOD_TAG" ] || [ -z "$MOD_COMMIT" ]; then + echo "跳过 $item_lower 未匹配有效标签与提交点" continue fi - echo "正在合并 $item_lower 标签版本:$MOD_TAG" - git checkout origin/tags/"$MOD_TAG" -- "$item_lower" "lib$item_lower" - git add "$item_lower" "lib$item_lower" - git commit -m "合并模块 $item ,来源版本标签:$MOD_TAG" + echo "模块:$item_lower 标签:$MOD_TAG 对应提交点:$MOD_COMMIT" + # 拉取主目录 + lib目录 指定commit文件 + git checkout "origin/${item_lower}" "${MOD_COMMIT}:${item_lower}" "${MOD_COMMIT}:lib${item_lower}" + git add "${item_lower}" "lib${item_lower}" + git commit -m "合并模块 $item ,来源标签:$MOD_TAG 提交点:$MOD_COMMIT" done -echo "所有模块合并执行完毕" +echo "所有模块合并完成" echo "准备推送远程分支" git push