#!/bin/bash
# 删除分支操作
target_branch="feature/dev_v6.4.0_gzy"
# 定义颜色和Emoji常量
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
RESET="\033[0m"
SUCCESS_EMOJI="✅"
FAIL_EMOJI="❌"
WARNING_EMOJI="⚠️ "
INFO_EMOJI="ℹ️ "
# 日志文件路径(强制使用绝对路径)
LOG_FILE="$(pwd)/delete_branches_$(date +%Y%m%d_%H%M%S).log"
# 导出所有依赖项(关键修复)
export RED GREEN YELLOW BLUE RESET \
SUCCESS_EMOJI FAIL_EMOJI WARNING_EMOJI INFO_EMOJI \
LOG_FILE target_branch
# 打印带颜色的日志函数
log() {
local level=$1
local message=$2
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
case $level in
"SUCCESS") echo "${GREEN}${SUCCESS_EMOJI} [${timestamp}] SUCCESS: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
"ERROR") echo "${RED}${FAIL_EMOJI} [${timestamp}] ERROR: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
"WARNING") echo "${YELLOW}${WARNING_EMOJI} [${timestamp}] WARNING: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
"INFO") echo "${BLUE}${INFO_EMOJI} [${timestamp}] INFO: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
esac
}
export -f log
echo "\n${BLUE}==================== 脚本启动 ====================${RESET}"
log "INFO" "开始批量删除远程分支操作"
# 遍历所有子目录
find . -maxdepth 1 -type d ! -name "." | while read -r dir; do
echo "\n${BLUE}▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 处理目录: ${dir} ▄▄▄▄▄▄▄▄▄▄▄▄▄▄${RESET}"
(
cd "$dir" || { log "ERROR" "无法进入目录: $dir"; exit 1; }
# 新增Git仓库检测
if ! git rev-parse --is-inside-work-tree &>/dev/null; then
log "WARNING" "非Git仓库目录: $dir"
exit 0
fi
# 更新远程分支
if ! git fetch --prune 2>&1 | tee -a "$LOG_FILE"; then
log "ERROR" "分支列表更新失败: $dir"
exit 1
fi
# 匹配并删除分支
git branch -r | grep "origin/${target_branch}$" | while read -r branch; do
branch_name="${branch#origin/}"
log "INFO" "尝试删除分支: ${branch_name}"
if git push origin --delete "$branch_name" 2>&1 | tee -a "$LOG_FILE"; then
log "SUCCESS" "分支删除成功: ${branch_name}"
else
log "ERROR" "分支删除失败: ${branch_name}"
fi
done
)
done
echo "\n${BLUE}==================== 脚本结束 ====================${RESET}"
log "INFO" "操作已完成,详细日志请查看: ${LOG_FILE}"
0 Comments