From cd375cefc585732ca0a89283495f2523676682f8 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 17 May 2026 11:25:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E5=8F=96=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E5=88=86=E6=94=AF=20origin/xxx=20=E6=9C=80=E6=96=B0=E5=85=A8?= =?UTF-8?q?=E9=87=8F=20Commit=EF=BC=8C=E4=B8=8D=E9=99=90=E5=88=B6=E5=AD=90?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=20=E2=80=8B=202.=C2=A0=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E5=8C=B9=E9=85=8D=EF=BC=9A=E5=8F=AA=E8=A6=81?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E5=89=8D=E7=BC=80=E6=98=AF=20=C2=A0=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=90=8D-=C2=A0=20=E5=B0=B1=E5=8C=B9=E9=85=8D=20?= =?UTF-8?q?=E2=80=8B=203.=C2=A0=E4=BF=9D=E7=95=99=E4=BD=A0=E5=8E=9F?= =?UTF-8?q?=E6=9C=89=E5=85=A8=E9=83=A8=E8=84=9A=E6=9C=AC=E7=BB=93=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E5=8F=AA=E6=94=B9=20=C2=A0get=5Fmodule=5Flatest=5Ftag?= =?UTF-8?q?=C2=A0=20=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ashMergeProjects-to-Projects_Keeper_Tag.sh | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh b/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh index b638a6a..e61421c 100644 --- a/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh +++ b/.winboll/bashMergeProjects-to-Projects_Keeper_Tag.sh @@ -12,18 +12,22 @@ get_module_latest_tag() { # 先同步远程分支元数据 git fetch origin "$module_dir" 2>/dev/null - # 获取该模块目录最新一次提交CommitHash + # 修复:取整个远程分支最新Commit,不限制子目录 local latest_commit - latest_commit=$(git log -1 --pretty=format:%H "$remote_branch" -- "$module_dir"/ 2>/dev/null) + latest_commit=$(git log -1 --pretty=format:%H "$remote_branch" 2>/dev/null) + + echo " 调试:模块[$module_dir] 远程分支最新Commit = $latest_commit" # 无commit直接返回空 - [ -z "$latest_commit" ] && return + if [ -z "$latest_commit" ]; then + echo " 调试:未获取到有效Commit,跳过" + return + fi - # 匹配远程同commit、模块前缀的标签,过滤废弃^{}引用 - git ls-remote --tags origin "${module_dir}*" 2>/dev/null \ + # 精准匹配:模块名- 开头标签 + 严格比对commit哈希 + git ls-remote --tags origin "${module_dir}-*" 2>/dev/null \ | grep -v '\^{}' \ - | grep "$latest_commit" \ - | awk '{print $2}' \ + | awk -v target_commit="$latest_commit" '$1 == target_commit {print $2}' \ | sed "s/refs\/tags\///" } @@ -190,6 +194,7 @@ echo -e "#@@@ 开始合并应用型模块源码 @@@#" for item in "${MERGE_APP_PROJECT_LIST[@]}"; do item_lower=$(echo "$item" | tr 'A-Z' 'a-z') + # 自动使用 origin/模块名 作为远程分支,检测标签 MOD_TAG=$(get_module_latest_tag "$item_lower") if [ -z "$MOD_TAG" ]; then echo "跳过 $item_lower :最新提交未打标签" @@ -198,8 +203,7 @@ for item in "${MERGE_APP_PROJECT_LIST[@]}"; do echo "合并 $item_lower (远程分支:origin/$item_lower,标签:$MOD_TAG)" git checkout origin/$item_lower $item_lower git add . - # 提交备注带上标签名 - git commit -m "合并 $item 项目,关联标签:$MOD_TAG" + git commit -m "合并 $item 项目,关联版本标签:$MOD_TAG" done ## 合并 LIB 项目 @@ -212,6 +216,7 @@ echo -e "#@@@ 开始合并类库型模块源码 @@@#" for item in "${MERGE_LIB_PROJECT_LIST[@]}"; do item_lower=$(echo "$item" | tr 'A-Z' 'a-z') + # 自动使用 origin/模块名 作为远程分支,检测标签 MOD_TAG=$(get_module_latest_tag "$item_lower") if [ -z "$MOD_TAG" ]; then echo "跳过 $item_lower :最新提交未打标签" @@ -220,8 +225,7 @@ for item in "${MERGE_LIB_PROJECT_LIST[@]}"; do echo "合并 $item_lower (远程分支:origin/$item_lower,标签:$MOD_TAG)" git checkout origin/$item_lower $item_lower lib$item_lower git add . - # 提交备注带上标签名 - git commit -m "合并 $item 项目,关联标签:$MOD_TAG" + git commit -m "合并 $item 项目,关联版本标签:$MOD_TAG" done echo '正在推送 Projects_Keeper 项目'