commit.sh 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #!/bin/bash
  2. source "$(dirname "$0")/common.sh"
  3. flag_add=false
  4. flag_commit=false
  5. flag_md=false
  6. flag_mm=false
  7. flag_pm=false
  8. commit_message=""
  9. function show_usage() {
  10. echo "用法:$0 [选项]"
  11. echo "选项:"
  12. echo " -a 添加所有更改到暂存区"
  13. echo " -c <message> 提交更改到 xiaom 分支"
  14. echo " -md 合并 xiaom 到 dev 分支"
  15. echo " -mm 合并 xiaom 到 main 分支"
  16. echo " -pm 合并 main 到 xiaom 分支"
  17. echo " -h 显示此帮助信息"
  18. echo ""
  19. echo "示例:"
  20. echo " $0 -a -c \"feat: 添加新功能\""
  21. echo " $0 -md"
  22. echo " $0 -mm"
  23. echo " $0 -pm"
  24. }
  25. # 解析参数
  26. while [[ $# -gt 0 ]]; do
  27. case $1 in
  28. -a)
  29. flag_add=true
  30. shift
  31. ;;
  32. -c)
  33. if [[ -z "$2" || "$2" == -* ]]; then
  34. echo "${RED}错误:-c 选项需要一个提交信息参数${RESET}"
  35. show_usage
  36. exit 1
  37. fi
  38. flag_commit=true
  39. commit_message="$2"
  40. shift 2
  41. ;;
  42. -md)
  43. flag_md=true
  44. shift
  45. ;;
  46. -mm)
  47. flag_mm=true
  48. shift
  49. ;;
  50. -pm)
  51. flag_pm=true
  52. shift
  53. ;;
  54. -h | --help)
  55. show_usage
  56. exit 0
  57. ;;
  58. -*)
  59. echo "${RED}错误:未知选项 $1${RESET}"
  60. show_usage
  61. exit 1
  62. ;;
  63. *)
  64. echo "${RED}错误:未知参数 $1${RESET}"
  65. show_usage
  66. exit 1
  67. ;;
  68. esac
  69. done
  70. if [ "$flag_add" = true ]; then
  71. echo "${MAGENTA}执行添加所有更改操作...${RESET}"
  72. execute_command "git add ." "git add 操作失败"
  73. fi
  74. if [ "$flag_commit" = true ] && [ -n "$commit_message" ]; then
  75. echo "${MAGENTA}正在向 xiaom 分支提交变更,提交信息:${RESET}${YELLOW}\"${commit_message}\"${RESET}"
  76. execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
  77. execute_command "git commit -m \"$commit_message\"" "提交操作失败"
  78. execute_command "git push" "推送至 xiaom 分支失败"
  79. fi
  80. if [ "$flag_pm" = true ]; then
  81. echo "${MAGENTA}正在合并 main 分支代码到个人分支 xiaom...${RESET}"
  82. # 合并 main 到 xiaom
  83. execute_command "git checkout main" "切换至 main 分支失败"
  84. execute_command "git pull" "拉取 main 分支最新内容失败"
  85. execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
  86. execute_command "git merge main" "合并 main 到 xiaom 分支失败" "false"
  87. merge_m2x_status=$?
  88. if [ $merge_m2x_status -ne 0 ]; then
  89. # 检查是否有冲突
  90. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  91. echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
  92. echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
  93. read -n 1 -s -r -p ""
  94. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  95. echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
  96. exit 1
  97. fi
  98. execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
  99. else
  100. exit ${merge_m2x_status}
  101. fi
  102. fi
  103. execute_command "git push" "推送 xiaom 分支失败"
  104. fi
  105. if [ "$flag_md" = true ]; then
  106. echo "${MAGENTA}正在合并代码到 nomo-dev 分支...${RESET}"
  107. # 合并 xiaom 到 nomo-dev
  108. execute_command "git checkout nomo-dev" "切换至 nomo-dev 分支失败"
  109. execute_command "git pull" "拉取 nomo-dev 分支最新内容失败"
  110. execute_command "git merge xiaom" "合并 xiaom 到 nomo-dev 分支失败" "false"
  111. merge_x2d_status=$?
  112. if [ $merge_x2d_status -ne 0 ]; then
  113. # 检查是否有冲突
  114. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  115. echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
  116. echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
  117. read -n 1 -s -r -p ""
  118. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  119. echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
  120. exit 1
  121. fi
  122. execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
  123. else
  124. exit ${merge_x2d_status}
  125. fi
  126. fi
  127. execute_command "git push" "推送 nomo-dev 分支失败"
  128. execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
  129. fi
  130. if [ "$flag_mm" = true ]; then
  131. echo "${MAGENTA}正在合并代码到 main 分支...${RESET}"
  132. # 合并 xiaom 到 main
  133. execute_command "git checkout main" "切换至 main 分支失败"
  134. execute_command "git pull" "拉取 main 分支最新内容失败"
  135. execute_command "git merge xiaom" "合并 xiaom 到 main 分支失败" "false"
  136. merge_x2m_status=$?
  137. if [ $merge_x2m_status -ne 0 ]; then
  138. # 检查是否有冲突
  139. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  140. echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
  141. echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
  142. read -n 1 -s -r -p ""
  143. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  144. echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
  145. exit 1
  146. fi
  147. execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
  148. else
  149. exit ${merge_x2m_status}
  150. fi
  151. fi
  152. execute_command "git push" "推送 main 分支失败"
  153. execute_command "git checkout xiaom" "切换至 xiaom 分支失败"
  154. fi
  155. if [ "$flag_add" = false ] && [ "$flag_commit" = false ] && [ "$flag_pm" = false ] && [ "$flag_md" = false ] && [ "$flag_mm" = false ]; then
  156. echo "${YELLOW}未提供有效参数${RESET}"
  157. show_usage
  158. fi