添加projects-keeper分支项目自动合并脚本。
This commit is contained in:
189
.winboll/bashMergeProjects-to-Projects_Keeper.sh
Normal file
189
.winboll/bashMergeProjects-to-Projects_Keeper.sh
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user