Pārlūkot izejas kodu

feat: 代码提交脚本

BaiLuoYan 1 mēnesi atpakaļ
vecāks
revīzija
e1e7b478e6
3 mainītis faili ar 417 papildinājumiem un 0 dzēšanām
  1. 198 0
      commit.sh
  2. 109 0
      pull.sh
  3. 110 0
      push.sh

+ 198 - 0
commit.sh

@@ -0,0 +1,198 @@
+#!/bin/bash
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[0;33m'
+MAGENTA='\033[0;35m'
+RESET='\033[0m'
+
+flag_add=false
+flag_commit=false
+flag_md=false
+flag_mm=false
+flag_pm=false
+commit_message=""
+
+function execute_command() {
+    command="$1"
+    message="$2"
+    exit_on_failure=${3:-true}
+
+    echo "${GREEN}执行命令:${command}${RESET}"
+
+    eval "${command}"
+    status=$?
+
+    if [[ ${status} -ne 0 ]]; then
+        echo "${RED}错误:${message}${RESET}"
+        if [[ "$exit_on_failure" == "true" ]]; then
+            exit ${status}
+        else
+            return ${status}
+        fi
+    fi
+}
+
+function show_usage() {
+    echo "用法:$0 [选项]"
+    echo "选项:"
+    echo "  -a              添加所有更改到暂存区"
+    echo "  -c <message>    提交更改到 xiaom 分支"
+    echo "  -md             合并 xiaom 到 dev 分支"
+    echo "  -mm             合并 xiaom 到 master 分支"
+    echo "  -pm             合并 master 到 xiaom 分支"
+    echo "  -h              显示此帮助信息"
+    echo ""
+    echo "示例:"
+    echo "  $0 -a -c \"feat: 添加新功能\""
+    echo "  $0 -md"
+    echo "  $0 -mm"
+    echo "  $0 -pm"
+}
+
+# 解析参数
+while [[ $# -gt 0 ]]; do
+    case $1 in
+    -a)
+        flag_add=true
+        shift
+        ;;
+    -c)
+        if [[ -z "$2" || "$2" == -* ]]; then
+            echo "${RED}错误:-c 选项需要一个提交信息参数${RESET}"
+            show_usage
+            exit 1
+        fi
+        flag_commit=true
+        commit_message="$2"
+        shift 2
+        ;;
+    -md)
+        flag_md=true
+        shift
+        ;;
+    -mm)
+        flag_mm=true
+        shift
+        ;;
+    -pm)
+        flag_pm=true
+        shift
+        ;;
+    -h | --help)
+        show_usage
+        exit 0
+        ;;
+    -*)
+        echo "${RED}错误:未知选项 $1${RESET}"
+        show_usage
+        exit 1
+        ;;
+    *)
+        echo "${RED}错误:未知参数 $1${RESET}"
+        show_usage
+        exit 1
+        ;;
+    esac
+done
+
+if [ "$flag_add" = true ]; then
+    echo "${MAGENTA}执行添加所有更改操作...${RESET}"
+    execute_command "git add ." "git add 操作失败"
+fi
+
+if [ "$flag_commit" = true ] && [ -n "$commit_message" ]; then
+    echo "${MAGENTA}正在向 xiaom 分支提交变更,提交信息:${RESET}${YELLOW}\"${commit_message}\"${RESET}"
+    execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
+    execute_command "git commit -m \"$commit_message\"" "提交操作失败"
+    execute_command "git push" "推送至 xiaom 分支失败"
+fi
+
+if [ "$flag_pm" = true ]; then
+    echo "${MAGENTA}正在合并 master 分支代码到个人分支 xiaom...${RESET}"
+    # 合并 master 到 xiaom
+    execute_command "git checkout master" "切换至 master 分支失败"
+    execute_command "git pull" "拉取 master 分支最新内容失败"
+    execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
+    execute_command "git merge master" "合并 master 到 xiaom 分支失败" "false"
+    merge_m2x_status=$?
+    if [ $merge_m2x_status -ne 0 ]; then
+        # 检查是否有冲突
+        if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+            echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+            echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+            read -n 1 -s -r -p ""
+
+            if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+                echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+                exit 1
+            fi
+
+            execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+        else
+            exit ${merge_m2x_status}
+        fi
+    fi
+    execute_command "git push" "推送 xiaom 分支失败"
+fi
+
+if [ "$flag_md" = true ]; then
+    echo "${MAGENTA}正在合并代码到 nomo-dev 分支...${RESET}"
+    # 合并 xiaom 到 nomo-dev
+    execute_command "git checkout nomo-dev" "切换至 nomo-dev 分支失败"
+    execute_command "git pull" "拉取 nomo-dev 分支最新内容失败"
+    execute_command "git merge xiaom" "合并 xiaom 到 nomo-dev 分支失败" "false"
+    merge_x2d_status=$?
+    if [ $merge_x2d_status -ne 0 ]; then
+        # 检查是否有冲突
+        if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+            echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+            echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+            read -n 1 -s -r -p ""
+
+            if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+                echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+                exit 1
+            fi
+
+            execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+        else
+            exit ${merge_x2d_status}
+        fi
+    fi
+    execute_command "git push" "推送 nomo-dev 分支失败"
+    execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
+fi
+
+if [ "$flag_mm" = true ]; then
+    echo "${MAGENTA}正在合并代码到 master 分支...${RESET}"
+    # 合并 xiaom 到 master
+    execute_command "git checkout master" "切换至 master 分支失败"
+    execute_command "git pull" "拉取 master 分支最新内容失败"
+    execute_command "git merge xiaom" "合并 xiaom 到 master 分支失败" "false"
+    merge_x2m_status=$?
+    if [ $merge_x2m_status -ne 0 ]; then
+        # 检查是否有冲突
+        if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+            echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+            echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+            read -n 1 -s -r -p ""
+
+            if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+                echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+                exit 1
+            fi
+
+            execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+        else
+            exit ${merge_x2m_status}
+        fi
+    fi
+    execute_command "git push" "推送 master 分支失败"
+    execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
+fi
+
+if [ "$flag_add" = false ] && [ "$flag_commit" = false ] && [ "$flag_pm" = false ] && [ "$flag_md" = false ] && [ "$flag_mm" = false ]; then
+    echo "${YELLOW}未提供有效参数${RESET}"
+    show_usage
+fi

+ 109 - 0
pull.sh

@@ -0,0 +1,109 @@
+#!/bin/bash
+
+product_code_list=("nomo")
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[0;33m'
+MAGENTA='\033[0;35m'
+RESET='\033[0m'
+
+function execute_command() {
+    command="$1"
+    message="$2"
+    exit_on_failure=${3:-true}
+
+    echo "${GREEN}执行命令:${command}${RESET}"
+
+    eval "${command}"
+    status=$?
+
+    if [[ ${status} -ne 0 ]]; then
+        echo "${RED}错误:${message}${RESET}"
+        if [[ "$exit_on_failure" == "true" ]]; then
+            exit ${status}
+        else
+            return ${status}
+        fi
+    fi
+}
+
+for product_code in "${product_code_list[@]}"; do
+    echo "${MAGENTA}正在合并 ${product_code} 代码...${RESET}"
+    # 切换并拉取 ${product_code}-prod 分支
+    execute_command "git checkout ${product_code}-prod" "切换至 ${product_code}-prod 分支失败"
+    execute_command "git pull" "拉取 ${product_code}-prod 分支最新内容失败"
+
+    # 合并 ${product_code}-prod 到 ${product_code}-test
+    execute_command "git checkout ${product_code}-test" "切换至 ${product_code}-test 分支失败"
+    execute_command "git pull" "拉取 ${product_code}-test 分支最新内容失败"
+    execute_command "git merge ${product_code}-prod" "合并 ${product_code}-prod 到 ${product_code}-test 分支失败" "false"
+    merge_p2t_status=$?
+    if [ $merge_p2t_status -ne 0 ]; then
+        # 检查是否有冲突
+        if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+            echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+            echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+            read -n 1 -s -r -p ""
+
+            if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+                echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+                exit 1
+            fi
+
+            execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+        else
+            exit ${merge_p2t_status}
+        fi
+    fi
+    execute_command "git push" "推送 ${product_code}-test 分支失败"
+
+    # 合并 ${product_code}-test 到 master
+    execute_command "git checkout master" "切换至 master 分支失败"
+    execute_command "git pull" "拉取 master 分支最新内容失败"
+    execute_command "git merge ${product_code}-test" "合并 ${product_code}-test 到 master 分支失败" "false"
+    merge_t2m_status=$?
+    if [ $merge_t2m_status -ne 0 ]; then
+        # 检查是否有冲突
+        if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+            echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+            echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+            read -n 1 -s -r -p ""
+
+            if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+                echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+                exit 1
+            fi
+
+            execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+        else
+            exit ${merge_t2m_status}
+        fi
+    fi
+    execute_command "git push" "推送至 master 分支失败"
+done
+
+# # 合并 master 到 ${product_code}-dev
+# execute_command "git checkout ${product_code}-dev" "切换至 ${product_code}-dev 分支失败"
+# execute_command "git pull" "拉取 ${product_code}-dev 分支最新内容失败"
+# execute_command "git merge master" "合并 master 到 ${product_code}-dev 分支失败" "false"
+# merge_m2d_status=$?
+# if [ $merge_m2d_status -ne 0 ]; then
+#     # 检查是否有冲突
+#     if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+#         echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+#         echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+#         read -n 1 -s -r -p ""
+#         if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+#             echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+#             exit 1
+#         fi
+#         execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+#     else
+#         exit ${merge_m2d_status}
+#     fi
+# fi
+# execute_command "git push" "推送至 ${product_code}-dev 分支失败"
+
+# 切换到 xiaom 分支
+execute_command "git checkout xiaom" "切换至 xiaom 分支失败"

+ 110 - 0
push.sh

@@ -0,0 +1,110 @@
+#!/bin/bash
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[0;33m'
+MAGENTA='\033[0;35m'
+RESET='\033[0m'
+
+function execute_command() {
+    command="$1"
+    message="$2"
+    exit_on_failure=${3:-true}
+
+    echo "${GREEN}执行命令:${command}${RESET}"
+
+    eval "${command}"
+    status=$?
+
+    if [[ ${status} -ne 0 ]]; then
+        echo "${RED}错误:${message}${RESET}"
+        if [[ "$exit_on_failure" == "true" ]]; then
+            exit ${status}
+        else
+            return ${status}
+        fi
+    fi
+}
+
+while getopts "p:e:" opt; do
+    case $opt in
+    p)
+        product_code="${OPTARG}"
+        ;;
+    e)
+        env="${OPTARG}"
+        ;;
+    *)
+        echo "用法:$0 -p 产品code [-e 发布环境]"
+        exit 1
+        ;;
+    esac
+done
+
+if [ -z "$product_code" ]; then
+    echo "错误:必须指定产品 code (-p)"
+    echo "用法:$0 -p 产品code [-e 发布环境]"
+    exit 1
+fi
+
+env=${env:-test}
+
+echo "${MAGENTA}正在合并代码到 ${product_code}-test 分支...${RESET}"
+
+# 切换并拉取 master 分支
+execute_command "git checkout master" "切换至 master 分支失败"
+execute_command "git pull" "拉取 master 分支最新内容失败"
+
+# 合并 master 到 ${product_code}-test
+execute_command "git checkout ${product_code}-test" "切换至 ${product_code}-test 分支失败"
+execute_command "git pull" "拉取 ${product_code}-test 分支最新内容失败"
+execute_command "git merge master" "合并 master 到 ${product_code}-test 分支失败" "false"
+merge_m2t_status=$?
+if [ $merge_m2t_status -ne 0 ]; then
+    # 检查是否有冲突
+    if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+        echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+        echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+        read -n 1 -s -r -p ""
+
+        if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+            echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+            exit 1
+        fi
+
+        execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+    else
+        exit ${merge_m2t_status}
+    fi
+fi
+execute_command "git push" "推送 ${product_code}-test 分支失败"
+
+# 合并 ${product_code}-test 到 ${product_code}-prod
+if [ "$env" = "prod" ]; then
+    echo "${MAGENTA}正在合并代码到 ${product_code}-prod 分支...${RESET}"
+    execute_command "git checkout ${product_code}-prod" "切换至 ${product_code}-prod 分支失败"
+    execute_command "git pull" "拉取 ${product_code}-prod 分支最新内容失败"
+    execute_command "git merge ${product_code}-test" "合并 ${product_code}-test 到 ${product_code}-prod 分支失败" "false"
+    merge_t2p_status=$?
+    if [ $merge_t2p_status -ne 0 ]; then
+        # 检查是否有冲突
+        if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+            echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
+            echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
+            read -n 1 -s -r -p ""
+
+            if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
+                echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
+                exit 1
+            fi
+
+            execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
+        else
+            exit ${merge_t2p_status}
+        fi
+    fi
+    execute_command "git push" "推送 ${product_code}-prod 分支失败"
+fi
+
+# 切换到 xiaom 分支
+execute_command "git checkout xiaom" "切换至 xiaom 分支失败"