pull.sh 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/bin/bash
  2. product_code_list=("nomo")
  3. RED='\033[0;31m'
  4. GREEN='\033[0;32m'
  5. YELLOW='\033[0;33m'
  6. MAGENTA='\033[0;35m'
  7. RESET='\033[0m'
  8. function execute_command() {
  9. command="$1"
  10. message="$2"
  11. exit_on_failure=${3:-true}
  12. echo "${GREEN}执行命令:${command}${RESET}"
  13. eval "${command}"
  14. status=$?
  15. if [[ ${status} -ne 0 ]]; then
  16. echo "${RED}错误:${message}${RESET}"
  17. if [[ "$exit_on_failure" == "true" ]]; then
  18. exit ${status}
  19. else
  20. return ${status}
  21. fi
  22. fi
  23. }
  24. for product_code in "${product_code_list[@]}"; do
  25. echo "${MAGENTA}正在合并 ${product_code} 代码...${RESET}"
  26. # 切换并拉取 ${product_code}-prod 分支
  27. execute_command "git checkout ${product_code}-prod" "切换至 ${product_code}-prod 分支失败"
  28. execute_command "git pull" "拉取 ${product_code}-prod 分支最新内容失败"
  29. # 合并 ${product_code}-prod 到 ${product_code}-test
  30. execute_command "git checkout ${product_code}-test" "切换至 ${product_code}-test 分支失败"
  31. execute_command "git pull" "拉取 ${product_code}-test 分支最新内容失败"
  32. execute_command "git merge ${product_code}-prod" "合并 ${product_code}-prod 到 ${product_code}-test 分支失败" "false"
  33. merge_p2t_status=$?
  34. if [ $merge_p2t_status -ne 0 ]; then
  35. # 检查是否有冲突
  36. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  37. echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
  38. echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
  39. read -n 1 -s -r -p ""
  40. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  41. echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
  42. exit 1
  43. fi
  44. execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
  45. else
  46. exit ${merge_p2t_status}
  47. fi
  48. fi
  49. execute_command "git push" "推送 ${product_code}-test 分支失败"
  50. # 合并 ${product_code}-test 到 master
  51. execute_command "git checkout master" "切换至 master 分支失败"
  52. execute_command "git pull" "拉取 master 分支最新内容失败"
  53. execute_command "git merge ${product_code}-test" "合并 ${product_code}-test 到 master 分支失败" "false"
  54. merge_t2m_status=$?
  55. if [ $merge_t2m_status -ne 0 ]; then
  56. # 检查是否有冲突
  57. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  58. echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
  59. echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
  60. read -n 1 -s -r -p ""
  61. if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  62. echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
  63. exit 1
  64. fi
  65. execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
  66. else
  67. exit ${merge_t2m_status}
  68. fi
  69. fi
  70. execute_command "git push" "推送至 master 分支失败"
  71. done
  72. # # 合并 master 到 ${product_code}-dev
  73. # execute_command "git checkout ${product_code}-dev" "切换至 ${product_code}-dev 分支失败"
  74. # execute_command "git pull" "拉取 ${product_code}-dev 分支最新内容失败"
  75. # execute_command "git merge master" "合并 master 到 ${product_code}-dev 分支失败" "false"
  76. # merge_m2d_status=$?
  77. # if [ $merge_m2d_status -ne 0 ]; then
  78. # # 检查是否有冲突
  79. # if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  80. # echo "${YELLOW}检测到合并冲突,请手动解决冲突...${RESET}"
  81. # echo "${YELLOW}解决冲突后,按任意键继续...${RESET}"
  82. # read -n 1 -s -r -p ""
  83. # if [[ $(git ls-files -u | wc -l) -gt 0 ]]; then
  84. # echo "${RED}错误:仍存在未解决的冲突,请处理后再继续${RESET}"
  85. # exit 1
  86. # fi
  87. # execute_command "git commit -m 'chore(merge): 解决冲突'" "提交冲突解决方案失败"
  88. # else
  89. # exit ${merge_m2d_status}
  90. # fi
  91. # fi
  92. # execute_command "git push" "推送至 ${product_code}-dev 分支失败"
  93. # 切换到 xiaom 分支
  94. execute_command "git checkout xiaom" "切换至 xiaom 分支失败"