commit.sh 6.3 KB

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