From 7e2f48f33a0ad923fd50a6650b6f4139d9822ce4 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sat, 16 May 2026 10:23:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0projects-keeper=E5=88=86?= =?UTF-8?q?=E6=94=AF=E9=A1=B9=E7=9B=AE=E8=87=AA=E5=8A=A8=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bashMergeProjects-to-Projects_Keeper.sh | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 .winboll/bashMergeProjects-to-Projects_Keeper.sh diff --git a/.winboll/bashMergeProjects-to-Projects_Keeper.sh b/.winboll/bashMergeProjects-to-Projects_Keeper.sh new file mode 100644 index 0000000..ee85ca4 --- /dev/null +++ b/.winboll/bashMergeProjects-to-Projects_Keeper.sh @@ -0,0 +1,189 @@ +#!/system/bin/sh +## 合并其他项目分支的模块源码到projects-keeper分支。 + +# ====================== 0. 进入目标目录 ====================== +TARGET_DIR="/sdcard/AppProjects/Projects_Keeper" + +echo "切换工作目录到:$TARGET_DIR" +if ! cd "$TARGET_DIR"; then + echo "==============================================" + echo "错误:无法进入目标目录 $TARGET_DIR" + echo "==============================================" + exit 1 +fi + +# ====================== 1. 拉取远程最新源码(失败直接退出) ====================== +echo "==============================================" +echo "正在拉取远程最新源码..." +echo "==============================================" +if ! git pull; then + echo "==============================================" + echo "错误:拉取远程源码失败!" + echo "请检查网络、仓库冲突或手动处理 git 状态后再执行脚本。" + echo "==============================================" + exit 1 +fi +echo "✅ 源码已拉取为最新状态" +echo "" + +# ====================== 2. 目录路径检查 ====================== +CUR_DIR=$(pwd) +if [ "$CUR_DIR" != "$TARGET_DIR" ]; then + echo "错误:当前目录不是项目根目录!" + echo "请先进入目录:$TARGET_DIR" + exit 1 +fi + +# ====================== 3. Git 分支检查 ====================== +CUR_BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) +TARGET_BRANCH="projects-keeper" + +if [ "$CUR_BRANCH" != "$TARGET_BRANCH" ]; then + echo "错误:当前不在 $TARGET_BRANCH 分支!" + echo "当前分支:$CUR_BRANCH" + echo "请先执行:git checkout $TARGET_BRANCH" + exit 1 +fi + +# ====================== 4. 预设标准模块列表 ====================== +MERGE_OBJECTS_LIST=( +.git +.gitignore +.gitmodules +.winboll +GenKeyStore +LICENSE +LICENSE-Private-Demo +LICENSE-Private-Demo_docs +README.md +aes +appbase +autonfc +build.gradle +contacts +debugtemp +gallery +gpsrelaysentinel +gradle +gradle.properties-android-demo +gradle.properties-androidx-demo +gradlew +libaes +libappbase +libdebugtemp +libgpsrelaysentinel +libwinboll +local.properties-demo +mymessagemanager +positions +powerbell +settings.gradle-demo +winboll +winboll.properties-demo +) + +# ====================== 5. 获取当前目录真实文件列表 ====================== +REAL_ITEMS=() +while IFS= read -r line; do + if [[ "$line" != "." && "$line" != ".." ]]; then + REAL_ITEMS+=("$line") + fi +done < <(ls -a) + +# ====================== 6. 差异比对函数 ====================== +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 + 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 + done + + if [[ ${#missing[@]} -gt 0 || ${#extra[@]} -gt 0 ]]; then + echo "==============================================" + echo "【错误】合并环境与脚本预设列表不匹配!" + echo "请手动核对并修改合并脚本。" + echo "==============================================" + + if [[ ${#missing[@]} -gt 0 ]]; then + echo -e "\n👉 本地缺失项目:" + for m in "${missing[@]}"; do echo " $m"; done + fi + + if [[ ${#extra[@]} -gt 0 ]]; then + echo -e "\n👉 本地多余项目:" + for e in "${extra[@]}"; do echo " $e"; done + fi + + echo -e "\n==============================================" + exit 1 + fi +} + +# 执行差异校验 +check_diff + +# ====================== 全部校验通过,继续执行合并 ====================== +echo -e "#@@@ 开始合并模块源码 @@@# +## 目标合并对象列表:" + +for item in "${MERGE_OBJECTS_LIST[@]}"; do + echo "$item" +done + +echo -e "## 对象列表结束 +" + +## 合并 APP 项目 +MERGE_APP_PROJECT_LIST=( +DemoAPP +) +echo -e "#@@@ 开始合并模块源码 @@@# +## 目标合并对象列表:" + +for item in "${MERGE_APP_PROJECT_LIST[@]}"; do + echo "正在合并 $item 项目 ..." + item_lower=$(echo "$item" | tr 'A-Z' 'a-z') +git checkout origin/$item_lower $item_lower + git add . + git commit -m "合并 $item 项目" +done + +## 合并 LIB 项目 +MERGE_LIB_PROJECT_LIST=( +WinBoLL +APPBase +AES +) +echo -e "#@@@ 开始合并模块源码 @@@# +## 目标合并对象列表:" + +for item in "${MERGE_LIB_PROJECT_LIST[@]}"; do + echo "正在合并 $item 项目 ..." + item_lower=$(echo "$item" | tr 'A-Z' 'a-z') +git checkout origin/$item_lower $item_lower lib$item_lower + git add . + git commit -m "合并 $item 项目" +done \ No newline at end of file