Compare commits

...

5 Commits

Author SHA1 Message Date
e92538850f 合并模块APPBase 同步最新时间标签appbase-v15.20.12 2026-05-17 15:46:18 +08:00
81b7af0ec4 1. 排序规则彻底换掉
不再按版本号排序,按标签创建时间从新到旧,永远拿到最后发布的最新标签
​
2. 增加  -f  强制覆盖,确保拉取最新文件
​
3. 你现在  appbase-v15.20.12  是后打的标签,脚本会直接优先抓取它
​
4. 无差异也会正常同步最新标签版本文件
2026-05-17 15:45:57 +08:00
e2b4bddb61 BugFix 2026-05-17 15:43:18 +08:00
cbca61ad84 1. 删掉手动拼接标签逻辑,直接取用远程完整标签名,杜绝  appbase- 空格版本
​
2. 使用  git rev-parse --verify 标签^{commit}  精准拿远程标签commit
​
3. 合并来源强制指定  origin/模块名  远程分支
​
4. 空标签直接跳过,不再出现  xxx-  非法标签
​
5. 检出语法标准: git checkout 远程分支 commit -- 目录
2026-05-17 15:37:37 +08:00
28bc3a86e3 1. 版本排序彻底修复
按  大版本.中版本.小版本.迭代号  分段数字排序,优先抓取  appbase-v15.20.12  而不是旧版
​
2. 检出命令修正
统一使用  git checkout 提交哈希 -- 目录  语法,不再报路径不存在
2026-05-17 15:34:14 +08:00
3 changed files with 71 additions and 110 deletions

View File

@@ -1,50 +1,44 @@
#!/system/bin/sh
## 流程获取远程最新Tag → 获取Tag对应Commit → 按Commit合并远程模块目录到本地
## 逻辑:按时间取最新标签 → 拉取该标签目录合并
# ====================== 1. 获取模块远程最新版本TAG ======================
get_module_latest_tag() {
local module_name="$1"
git fetch origin --tags 2>/dev/null
git ls-remote --tags origin "${module_name}-*" 2>/dev/null \
# 按创建时间取模块最新标签(最新打的标签排最后)
get_latest_module_tag(){
local mod=$1
git for-each-ref --sort=-creatordate --format='%(refname)' refs/tags/${mod}-* \
| grep -v '\^{}' \
| sort -V \
| tail -1 \
| awk '{print $2}' \
| head -1 \
| sed 's/refs\/tags\///'
}
# ====================== 2. 通过TAG获取对应提交Commit哈希 ======================
get_commit_by_tag() {
local tag_name="$1"
git rev-list -1 "$tag_name" 2>/dev/null
# 通过标签获取commit
get_commit_from_tag(){
local tag=$1
git rev-parse --short "${tag}^{commit}"
}
# ====================== 进入工作目录 ======================
# 工作目录
TARGET_DIR="/sdcard/AppProjects/Projects_Keeper_Tag"
echo "切换工作目录:$TARGET_DIR"
if ! cd "$TARGET_DIR"; then
echo "目录切换失败!"
exit 1
fi
echo "进入目录:${TARGET_DIR}"
cd "${TARGET_DIR}" || exit 1
# ====================== 同步远程全部标签 ======================
echo "=============================================="
echo "同步远程所有分支与版本标签"
echo "=============================================="
# 同步远程
echo "========================================"
echo "同步远程分支与全部版本标签"
echo "========================================"
git fetch origin --prune
git fetch origin --tags
echo "同步完成"
echo ""
# ====================== 锁定本地目标分支 ======================
CUR_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null)
# 校验目标分支
NOW_BRANCH=$(git symbolic-ref --short HEAD)
TARGET_BRANCH="projects_keeper_tag"
if [ "$CUR_BRANCH" != "$TARGET_BRANCH" ]; then
echo "错误:当前不在 $TARGET_BRANCH 分支,请先切换!"
if [ "${NOW_BRANCH}" != "${TARGET_BRANCH}" ];then
echo "错误:请先切换到 ${TARGET_BRANCH} 分支"
exit 1
fi
# ====================== 目录结构校验 ======================
# 目录结构校验
MERGE_OBJECTS_LIST=(
.git
.gitignore
@@ -83,102 +77,69 @@ winboll.properties-demo
REAL_ITEMS=()
while IFS= read -r line; do
if [[ "$line" != "." && "$line" != ".." ]]; then
REAL_ITEMS+=("$line")
fi
[[ $line != "." && $line != ".." ]] && REAL_ITEMS+=("$line")
done < <(ls -a)
check_diff() {
local missing=()
local extra=()
for item in "${MERGE_OBJECTS_LIST[@]}"; do
local found=0
for r in "${REAL_ITEMS[@]}"; do
if [[ "$item" == "$r" ]]; then
found=1
break
fi
done
if (( found == 0 )); then
missing+=("$item")
fi
check_diff(){
local miss=() extra=()
for i in "${MERGE_OBJECTS_LIST[@]}";do
[[ ! " ${REAL_ITEMS[@]} " =~ " ${i} " ]] && miss+=("$i")
done
for r in "${REAL_ITEMS[@]}"; do
local found=0
for item in "${MERGE_OBJECTS_LIST[@]}"; do
if [[ "$item" == "$r" ]]; then
found=1
break
fi
done
if (( found == 0 )); then
extra+=("$r")
fi
for i in "${REAL_ITEMS[@]}";do
[[ ! " ${MERGE_OBJECTS_LIST[@]} " =~ " ${i} " ]] && extra+=("$i")
done
if [[ ${#missing[@]} -gt 0 || ${#extra[@]} -gt 0 ]]; then
echo "目录结构不匹配,终止行"
if [[ ${#miss[@]} -gt 0 || ${#extra[@]} -gt 0 ]];then
echo "本地目录结构不一致,终止行"
exit 1
fi
}
check_diff
# ====================== 开始批量合并模块 ======================
echo -e "#@@@ 开始按【最新Tag+对应Commit】合并模块 @@@#"
echo -e "#@@@ 按时间获取最新标签合并模块源码 @@@#"
## 合并应用型模块
# 应用型模块
MERGE_APP_PROJECT_LIST=(DemoAPP)
echo -e "---------- 应用型模块合并 ----------"
for item in "${MERGE_APP_PROJECT_LIST[@]}"; do
item_lower=$(echo "$item" | tr 'A-Z' 'a-z')
LATEST_TAG=$(get_module_latest_tag "$item_lower")
if [ -z "$LATEST_TAG" ]; then
echo "跳过 $item_lower :未查询到任何版本标签"
echo -e "---------- 应用型模块 ----------"
for name in "${MERGE_APP_PROJECT_LIST[@]}";do
low_name=$(echo "$name" | tr 'A-Z' 'a-z')
tag=$(get_latest_module_tag "${low_name}")
if [[ -z "${tag}" ]];then
echo "跳过 ${low_name}:无远程标签"
continue
fi
TARGET_COMMIT=$(get_commit_by_tag "$LATEST_TAG")
if [ -z "$TARGET_COMMIT" ]; then
echo "跳过 $item_lower :标签 $LATEST_TAG 未查询到对应提交点"
commit=$(get_commit_from_tag "${tag}")
if [[ -z "${commit}" ]];then
echo "跳过 ${low_name}:标签无有效提交点"
continue
fi
echo "模块:$item_lower"
echo "最新标签:$LATEST_TAG"
echo "对应提交点:$TARGET_COMMIT"
echo "----------------------------------------"
# 正确写法用commit检出指定目录
git checkout ${TARGET_COMMIT} -- ${item_lower}
git add ${item_lower}
git commit -m "合并模块${item} 来源最新标签:${LATEST_TAG} 提交点:${TARGET_COMMIT}"
echo "模块:${low_name} 最新时间标签:${tag} 提交ID:${commit}"
# 强制拉取覆盖
git checkout -f "${tag}" -- "${low_name}"
git add "${low_name}"
git commit -m "合并模块${name} 同步最新时间标签${tag}"
done
## 合并类库模块
# 类库模块
MERGE_LIB_PROJECT_LIST=(WinBoLL APPBase AES)
echo -e "---------- 类库模块合并 ----------"
for item in "${MERGE_LIB_PROJECT_LIST[@]}"; do
item_lower=$(echo "$item" | tr 'A-Z' 'a-z')
LATEST_TAG=$(get_module_latest_tag "$item_lower")
if [ -z "$LATEST_TAG" ]; then
echo "跳过 $item_lower :未查询到任何版本标签"
echo -e "---------- 类库模块 ----------"
for name in "${MERGE_LIB_PROJECT_LIST[@]}";do
low_name=$(echo "$name" | tr 'A-Z' 'a-z')
tag=$(get_latest_module_tag "${low_name}")
if [[ -z "${tag}" ]];then
echo "跳过 ${low_name}:无远程标签"
continue
fi
TARGET_COMMIT=$(get_commit_by_tag "$LATEST_TAG")
if [ -z "$TARGET_COMMIT" ]; then
echo "跳过 $item_lower :标签 $LATEST_TAG 未查询到对应提交点"
commit=$(get_commit_from_tag "${tag}")
if [[ -z "${commit}" ]];then
echo "跳过 ${low_name}:标签无有效提交点"
continue
fi
echo "模块:$item_lower"
echo "最新标签:$LATEST_TAG"
echo "对应提交点:$TARGET_COMMIT"
echo "----------------------------------------"
# 同时检出主目录 + lib目录
git checkout ${TARGET_COMMIT} -- ${item_lower} lib${item_lower}
git add ${item_lower} lib${item_lower}
git commit -m "合并模块${item} 来源最新标签:${LATEST_TAG} 提交点:${TARGET_COMMIT}"
echo "模块:${low_name} 最新时间标签:${tag} 提交ID:${commit}"
git checkout -f "${tag}" -- "${low_name}" "lib${low_name}"
git add "${low_name}" "lib${low_name}"
git commit -m "合并模块${name} 同步最新时间标签${tag}"
done
echo "所有模块合并流程执行完毕"
echo "准备推送至远程分支"
echo "全部模块合并执行完毕"
echo "执行推送git push"
git push

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sun May 17 14:46:57 HKT 2026
stageCount=12
#Sun May 17 15:28:35 HKT 2026
stageCount=13
libraryProject=libappbase
baseVersion=15.20
publishVersion=15.20.11
publishVersion=15.20.12
buildCount=0
baseBetaVersion=15.20.12
baseBetaVersion=15.20.13

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sun May 17 14:46:57 HKT 2026
stageCount=12
#Sun May 17 15:28:35 HKT 2026
stageCount=13
libraryProject=libappbase
baseVersion=15.20
publishVersion=15.20.11
publishVersion=15.20.12
buildCount=0
baseBetaVersion=15.20.12
baseBetaVersion=15.20.13