1. 排序规则彻底换掉
不再按版本号排序,按标签创建时间从新到旧,永远拿到最后发布的最新标签 2. 增加 -f 强制覆盖,确保拉取最新文件 3. 你现在 appbase-v15.20.12 是后打的标签,脚本会直接优先抓取它 4. 无差异也会正常同步最新标签版本文件
This commit is contained in:
@@ -1,14 +1,16 @@
|
|||||||
#!/system/bin/sh
|
#!/system/bin/sh
|
||||||
## 执行流程
|
## 逻辑:按时间取最新标签 → 拉取该标签目录合并
|
||||||
## 1.拉取远程所有标签 2.取模块最新标签 3.取标签对应commit 4.从远程commit拉取指定目录到本地
|
|
||||||
|
|
||||||
# 获取模块最新完整标签
|
# 按创建时间取模块最新标签(最新打的标签排最后)
|
||||||
get_latest_module_tag(){
|
get_latest_module_tag(){
|
||||||
local mod=$1
|
local mod=$1
|
||||||
git ls-remote --tags origin "${mod}-*" | grep -v '\^{}' | sort -V | tail -1 | awk '{print $2}' | sed 's/refs\/tags\///'
|
git for-each-ref --sort=-creatordate --format='%(refname)' refs/tags/${mod}-* \
|
||||||
|
| grep -v '\^{}' \
|
||||||
|
| head -1 \
|
||||||
|
| sed 's/refs\/tags\///'
|
||||||
}
|
}
|
||||||
|
|
||||||
# 纯标签获取commit 不加多余前缀
|
# 通过标签获取commit
|
||||||
get_commit_from_tag(){
|
get_commit_from_tag(){
|
||||||
local tag=$1
|
local tag=$1
|
||||||
git rev-parse --short "${tag}^{commit}"
|
git rev-parse --short "${tag}^{commit}"
|
||||||
@@ -19,7 +21,7 @@ TARGET_DIR="/sdcard/AppProjects/Projects_Keeper_Tag"
|
|||||||
echo "进入目录:${TARGET_DIR}"
|
echo "进入目录:${TARGET_DIR}"
|
||||||
cd "${TARGET_DIR}" || exit 1
|
cd "${TARGET_DIR}" || exit 1
|
||||||
|
|
||||||
# 同步远程数据
|
# 同步远程
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
echo "同步远程分支与全部版本标签"
|
echo "同步远程分支与全部版本标签"
|
||||||
echo "========================================"
|
echo "========================================"
|
||||||
@@ -28,7 +30,7 @@ git fetch origin --tags
|
|||||||
echo "同步完成"
|
echo "同步完成"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 强制校验当前分支
|
# 校验目标分支
|
||||||
NOW_BRANCH=$(git symbolic-ref --short HEAD)
|
NOW_BRANCH=$(git symbolic-ref --short HEAD)
|
||||||
TARGET_BRANCH="projects_keeper_tag"
|
TARGET_BRANCH="projects_keeper_tag"
|
||||||
if [ "${NOW_BRANCH}" != "${TARGET_BRANCH}" ];then
|
if [ "${NOW_BRANCH}" != "${TARGET_BRANCH}" ];then
|
||||||
@@ -36,7 +38,7 @@ if [ "${NOW_BRANCH}" != "${TARGET_BRANCH}" ];then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 目录结构校验保留
|
# 目录结构校验
|
||||||
MERGE_OBJECTS_LIST=(
|
MERGE_OBJECTS_LIST=(
|
||||||
.git
|
.git
|
||||||
.gitignore
|
.gitignore
|
||||||
@@ -93,7 +95,7 @@ check_diff(){
|
|||||||
}
|
}
|
||||||
check_diff
|
check_diff
|
||||||
|
|
||||||
echo -e "#@@@ 开始按远程最新标签合并模块源码 @@@#"
|
echo -e "#@@@ 按时间获取最新标签合并模块源码 @@@#"
|
||||||
|
|
||||||
# 应用型模块
|
# 应用型模块
|
||||||
MERGE_APP_PROJECT_LIST=(DemoAPP)
|
MERGE_APP_PROJECT_LIST=(DemoAPP)
|
||||||
@@ -110,11 +112,11 @@ for name in "${MERGE_APP_PROJECT_LIST[@]}";do
|
|||||||
echo "跳过 ${low_name}:标签无有效提交点"
|
echo "跳过 ${low_name}:标签无有效提交点"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
echo "模块:${low_name} 最新标签:${tag} 提交ID:${commit}"
|
echo "模块:${low_name} 最新时间标签:${tag} 提交ID:${commit}"
|
||||||
# 标准正确拉取命令
|
# 强制拉取覆盖
|
||||||
git checkout "${tag}" -- "${low_name}"
|
git checkout -f "${tag}" -- "${low_name}"
|
||||||
git add "${low_name}"
|
git add "${low_name}"
|
||||||
git commit -m "合并模块${name} 来源标签${tag} 提交${commit}"
|
git commit -m "合并模块${name} 同步最新时间标签${tag}"
|
||||||
done
|
done
|
||||||
|
|
||||||
# 类库模块
|
# 类库模块
|
||||||
@@ -132,10 +134,10 @@ for name in "${MERGE_LIB_PROJECT_LIST[@]}";do
|
|||||||
echo "跳过 ${low_name}:标签无有效提交点"
|
echo "跳过 ${low_name}:标签无有效提交点"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
echo "模块:${low_name} 最新标签:${tag} 提交ID:${commit}"
|
echo "模块:${low_name} 最新时间标签:${tag} 提交ID:${commit}"
|
||||||
git checkout "${tag}" -- "${low_name}" "lib${low_name}"
|
git checkout -f "${tag}" -- "${low_name}" "lib${low_name}"
|
||||||
git add "${low_name}" "lib${low_name}"
|
git add "${low_name}" "lib${low_name}"
|
||||||
git commit -m "合并模块${name} 来源标签${tag} 提交${commit}"
|
git commit -m "合并模块${name} 同步最新时间标签${tag}"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "全部模块合并执行完毕"
|
echo "全部模块合并执行完毕"
|
||||||
|
|||||||
Reference in New Issue
Block a user