提交 7d3872c4 authored 作者: Andy's avatar Andy

23

上级 8ee36d9e
...@@ -138,91 +138,89 @@ check_install_PM2() { ...@@ -138,91 +138,89 @@ check_install_PM2() {
echo "🎉 Node.js & PM2 环境准备完成!" echo "🎉 Node.js & PM2 环境准备完成!"
} }
# 更新分支函数(带更新前恢复) # ========== 克隆函数 ==========
update_branch() { clone_branch() {
local repo_url=$1 local REPO_URL="$1"
local branch=$2 local BRANCH="$2"
local target_dir=$3 local TARGET_DIR="$3"
local MAX_RETRY="${4:-3}"
echo "Updating branch '$branch' in '$target_dir'..."
cd "$target_dir" || return 1
# 切换到目标分支
git checkout "$branch" >/dev/null 2>&1
# 更新前恢复到干净状态
echo "🔄 Resetting local changes on '$branch'..."
git reset --hard HEAD >/dev/null 2>&1
git clean -fd >/dev/null 2>&1
# 获取远程最新提交
git fetch origin "$branch"
local_commit=$(git rev-parse "$branch") echo "⬇️ 克隆分支:$BRANCH$TARGET_DIR"
remote_commit=$(git rev-parse "origin/$branch")
if [ "$local_commit" = "$remote_commit" ]; then
echo "✅ Branch '$branch' is up-to-date."
else
echo "⬇️ Branch '$branch' has updates. Pulling changes..."
RETRY=0 RETRY=0
until git pull origin "$branch"; do until git clone --branch "$BRANCH" --depth=1 "$REPO_URL" "$TARGET_DIR"; do
RETRY=$((RETRY + 1)) RETRY=$((RETRY + 1))
if [ "$RETRY" -ge "$MAX_RETRY" ]; then if [ "$RETRY" -ge "$MAX_RETRY" ]; then
echo "❌ Failed to update '$branch' after $MAX_RETRY attempts." echo_content "red" "❌ 克隆分支 $BRANCH 失败,多次重试无效。"
break return 1
fi fi
echo "Retrying pull for '$branch' ($RETRY/$MAX_RETRY)..." echo "重试克隆 ($RETRY/$MAX_RETRY)..."
sleep 2 sleep 2
done done
echo_content "green" "✅ 分支 $BRANCH 克隆完成。"
}
# ========== 更新函数 ==========
update_branch() {
local REPO_URL="$1"
local BRANCH="$2"
local TARGET_DIR="$3"
if [ ! -d "$TARGET_DIR/.git" ]; then
echo_content "red" "⚠️ 目录 $TARGET_DIR 不是 Git 仓库,无法更新。"
return 1
fi fi
echo "🔄 更新分支:$BRANCH$TARGET_DIR"
cd "$TARGET_DIR" || return 1
# 允许被删除的远程分支同步
git fetch origin "$BRANCH" --depth=1
git checkout "$BRANCH" || git checkout -b "$BRANCH" origin/"$BRANCH"
git pull origin "$BRANCH"
cd - >/dev/null cd - >/dev/null
echo_content "green" "✅ 分支 $BRANCH 更新完成。"
} }
# 克隆分支函数
clone_branch() {
local repo_url=$1
local branch=$2
local target_dir=$3
echo "Cloning branch '$branch' into '$target_dir'..." Git_Token=QFF_7BNyjHsq_Zvfsfut # 私有仓库需要填 Token,公有仓库留空即可
RETRY=0
until git clone --branch "$branch" --single-branch "$repo_url" "$target_dir"; do
RETRY=$((RETRY + 1))
if [ "$RETRY" -ge "$MAX_RETRY" ]; then
echo "❌ Failed to clone '$branch' after $MAX_RETRY attempts."
break
fi
echo "Retrying clone for '$branch' ($RETRY/$MAX_RETRY)..."
sleep 2
done
}
# ========== 主函数:管理全部分支 ==========
fetch_git_svr() { fetch_git_svr() {
echo_content "green" "📦 获取服务器端分支(支持 Token + git pull)..."
REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Game_Svr.git" # --- 配置区 ---
Git_User="LaunchDeploy" # GitHub 用户名或组织名
Git_Repo_Name="wk_gameplat_svr"
BASE_DIR="./svr" BASE_DIR="./svr"
MAX_RETRY=3 # 最大重试次数
BRANCHES=( GitHub_Repo_Branchs=(
"docker-base" "1031_Game_JinSha"
"docker-game"
"docker-proxy"
"bdgame"
) )
# 主循环
for BRANCH in "${BRANCHES[@]}"; do # Token HTTPS 地址
TARGET_DIR="$BASE_DIR/$BRANCH" Repo_Url="https://${Git_Token}@git.wkwork.xyz/${Git_User}/${Git_Repo_Name}.git"
mkdir -p "$BASE_DIR"
for Branch in "${GitHub_Repo_Branchs[@]}"; do
TARGET_DIR="$BASE_DIR/$Branch"
echo_content "skyBlue" "🌀 分支:$Branch"
if [ -d "$TARGET_DIR/.git" ]; then if [ -d "$TARGET_DIR/.git" ]; then
update_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR" update_branch "$Repo_Url" "$Branch" "$TARGET_DIR"
else else
clone_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR" clone_branch "$Repo_Url" "$Branch" "$TARGET_DIR"
fi fi
done done
echo_content "green" "🎉 所有 Svr 分支同步完成!"
} }
fetch_git_web() { fetch_git_web() {
REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Game_Web.git" REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Game_Web.git"
...@@ -393,8 +391,7 @@ main() { ...@@ -393,8 +391,7 @@ main() {
echo_content "skyBlue" "============================" echo_content "skyBlue" "============================"
echo_content "skyBlue" " 主菜单 " echo_content "skyBlue" " 主菜单 "
echo_content "skyBlue" "============================" echo_content "skyBlue" "============================"
echo_content "skyBlue" "1) 检查环境"
echo_content "skyBlue" "2) 测试 Git 账户"
echo_content "skyBlue" "3) 获取 Svr" echo_content "skyBlue" "3) 获取 Svr"
echo_content "skyBlue" "4) 获取 Web" echo_content "skyBlue" "4) 获取 Web"
echo_content "skyBlue" "5) 运行 Docker" echo_content "skyBlue" "5) 运行 Docker"
...@@ -404,21 +401,6 @@ main() { ...@@ -404,21 +401,6 @@ main() {
read -rp "请输入选项 [0-6]: " choice read -rp "请输入选项 [0-6]: " choice
case $choice in case $choice in
1)
check_install_dependencies
check_install_NodeJs
check_install_PM2
pause
;;
2)
if check_git_account; then
echo "✅ SSH 连接正常"
else
echo "❌ SSH 连接失败,请检查 SSH Key 或 Git 账户配置"
exit 1
fi
pause
;;
3) 3)
fetch_git_svr fetch_git_svr
pause pause
...@@ -449,8 +431,6 @@ main() { ...@@ -449,8 +431,6 @@ main() {
# ======= 安装默认工具 ======= # ======= 安装默认工具 =======
check_install_dependencies check_install_dependencies
# check_install_NodeJs
# check_install_PM2
# ======= 启动程序 ======= # ======= 启动程序 =======
# main main
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论