You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

repo.sh 4.3 kB

4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #调用当前脚本目录下 env.sh 脚本,设置环境变量,处理当前传入参数;
  2. if [ ! $ENV_SHELL ]
  3. then
  4. source `dirname $0`/env.sh "$*"
  5. fi
  6. echo ""
  7. echo "切换到主库根目录。。。"
  8. cd $BASE_DIR
  9. pwd
  10. #先执行初始化; 注:此命令只在 .git/config 文件中没有相应子模块的配置时才生效,重复执行并不会更改已有的配置;
  11. git submodule init
  12. echo ""
  13. #根据本地仓库的 .git 目录下是否存在 local.sh 脚本判断是否在更新子模块的代码库之前执行本地化配置;
  14. echo "检查是否执行子模块的本地化配置。。。"
  15. #判断本地化配置脚本是否存在;
  16. LOCAL_CONFIG="$BASE_DIR/.git/local.config"
  17. LOCALIZED=0
  18. if [ -f $LOCAL_CONFIG -a $CONFIG_REPO_PUBLIC == 0 ]
  19. then
  20. #执行子模块的本地化配置,将子模块的远程仓库地址指向本地;
  21. echo "---------------- 执行仓库的本地化配置 ----------------"
  22. #解析本地配置
  23. KEYS=($(cat $LOCAL_CONFIG | awk -F '=' 'length($1)>0 { print $1}'))
  24. VALUES=($(cat $LOCAL_CONFIG | awk -F '=' 'length($2)>0 { print $2}'))
  25. #匹配子模块 URL 配置名称的正则表达式
  26. # REG="submodule[\.].*[\.]url"
  27. #判断本地配置是否为空;
  28. echo "共有 ${#KEYS[@]} 项本地配置。。。"
  29. if [ ${#KEYS[@]} -gt 0 ]
  30. then
  31. for ((i=0; i<${#KEYS[@]}; i++));
  32. do
  33. #执行本地化配置;
  34. echo "[$i]: git config ${KEYS[i]} ${VALUES[i]}"
  35. git config ${KEYS[i]} ${VALUES[i]}
  36. #检查执行结果是否正常
  37. ERR=$?
  38. if [ $ERR != 0 ]
  39. then
  40. echo "执行仓库的本地化配置的过程中发生了错误[$ERR]!!终止构建!!"
  41. ${RTN} $ERR
  42. fi
  43. done
  44. LOCALIZED=1
  45. fi
  46. echo "---------------- 完成执行仓库的本地化配置 ----------------"
  47. echo ""
  48. fi
  49. # 如果没有进行仓库的本地化配置,则将仓库设置为公开配置;
  50. cd $BASE_DIR
  51. if [ $LOCALIZED == 0 ]
  52. then
  53. echo "---------------- 执行仓库的公共配置 ----------------"
  54. echo "同步子模块的公共配置。。。"
  55. git submodule sync
  56. # 更新远程仓库地址;
  57. git config remote.origin.url git@github.com:blockchain-jd-com/jdchain.git
  58. echo "---------------- 完成执行仓库的公共配置 ----------------"
  59. echo ""
  60. fi
  61. #同步主库的远程仓库 origin 的推送地址;
  62. REMOTE_ORIGIN_URL=$(git config --get remote.origin.url)
  63. git config remote.origin.pushurl $REMOTE_ORIGIN_URL
  64. echo "远程仓库的地址更新为:"$REMOTE_ORIGIN_URL
  65. echo ""
  66. #同步更新子模块的远程仓库 origin 的地址;
  67. echo "---------------- 更新子模块的远程仓库地址 ----------------"
  68. # 子模块名称列表;
  69. SUBMODULES=$(git submodule | awk '{print $2}')
  70. for m in $SUBMODULES;
  71. do
  72. SUBMODULE_URL=$(git config --get submodule.$m.url)
  73. echo "模块[$m].URL="$SUBMODULE_URL
  74. cd $BASE_DIR/$m
  75. git config remote.origin.url $SUBMODULE_URL
  76. git config remote.origin.pushurl $SUBMODULE_URL
  77. cd $BASE_DIR
  78. done
  79. #首次执行同步更新子模块的远程仓库 origin 的地址会将主项目地址更改,以下操作确保主项目远程仓库地址正确
  80. git config remote.origin.url $REMOTE_ORIGIN_URL
  81. git config remote.origin.pushurl $REMOTE_ORIGIN_URL
  82. #检查是否要跳过子模块更新环节;
  83. if [ $SKIP_SUBMODULES_UPDATE == 1 ]
  84. then
  85. echo "跳过子模块代码更新操作。。。[$RTN]"
  86. ${RTN}
  87. fi
  88. #初始化变量 SUBMODULES_UPDATED
  89. if [ ! $SUBMODULES_UPDATED ]
  90. then
  91. SUBMODULES_UPDATED=0
  92. fi
  93. if [ $SUBMODULES_UPDATED == 1 ]
  94. then
  95. echo "代码库已经最新,跳过更新操作。。。"
  96. ${RTN}
  97. fi
  98. # 更新子模块代码库
  99. echo "---------------- 更新子模块代码库 ----------------"
  100. cd $BASE_DIR
  101. echo "git submodule update --recursive --progress --jobs 6"
  102. git submodule update --recursive --progress --jobs 6
  103. #检查执行结果是否正常
  104. ERR=$?
  105. if [ $ERR != 0 ]
  106. then
  107. echo "更新子模块代码库时发生了错误!!返回错误码:$ERR"
  108. ${RTN} $ERR
  109. fi
  110. #标记代码已经更新;
  111. SUBMODULES_UPDATED=1
  112. echo "---------------- 完成子模块代码库更新 ----------------"
  113. echo ""