#!/bin/bash # 默认组件数组 widget_Array=() # 指定分支名作为参数传入 target_branch=$1 if [[ -z "$target_branch" ]]; then echo "请指定目标分支,例如: bash $0 feature/wg/test" exit 1 fi # 读取 .build.prod 文件内容 if [[ -f ./.build.prod ]]; then while IFS= read -r line || [ -n "$line" ]; do widget_Array+=("$line") done < ./.build.prod fi # 读取 .build 文件内容 if [[ -f ./.build ]]; then while IFS= read -r line || [ -n "$line" ]; do widget_Array+=("$line") done < ./.build fi # 读取 .build 文件内容 if [[ -f ./.build.local ]]; then while IFS= read -r line || [ -n "$line" ]; do widget_Array+=("$line") done < ./.build.local fi # 去重 widget_Array=($(echo "${widget_Array[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) # 存储切换信息的数组 declare -a switch_info # 循环遍历组件数组 for widgetName in "${widget_Array[@]}"; do # 检查组件目录是否存在 if [[ -d "src/widgets/$widgetName" ]]; then # 进入组件目录 cd "src/widgets/$widgetName" || { echo "无法进入目录 src/widgets/$widgetName"; continue; } # 获取当前分支名 current_branch=$(git symbolic-ref --short HEAD) # 如果当前分支代码有变动,提交变更 if [[ -n "$(git status --porcelain)" ]]; then git add . git commit -m 'merge' fi # 尝试切换到指定分支 if git show-ref --verify --quiet refs/heads/"$target_branch"; then git checkout "$target_branch" else # 如果没有指定分支,创建一个 git checkout -b "$target_branch" fi # 获取切换后的分支名 new_branch=$(git symbolic-ref --short HEAD) # 推送指定分支到远程 # git push --set-upstream origin "$target_branch" # 添加切换信息到数组 switch_info+=("$widgetName: $current_branch -> $new_branch") # 返回到上一级目录 cd - > /dev/null || exit else echo "目录 src/widgets/$widgetName 不存在" fi done # 统一输出切换信息 echo "切换信息:" for info in "${switch_info[@]}"; do echo "$info" done