其他分享
首页 > 其他分享> > 批量更新仓库小工具

批量更新仓库小工具

作者:互联网

#!/bin/bash

#########################################################
# 功能:批量更新仓库小工具
# 描述:根据repos配置,强制同步远程仓库内容到本地
# tips1:本地修改以及非repos定义内容将被抹掉
# tips2:执行完成后会切回本地master分支
#########################################################

#########################用户配置区########################
# 默认仓库路径
reposRootPath=$(pwd)/readonly
# repos配置,支持分组,最后一项被认为是仓库地址
#   eg1:reafdisp/wiki 未指定分组,直接以paas为根目录建立backstage的repo
#   eg1:paas,reafdisp/backstage 会先创建paas文件夹,再以paas为根目录建立backstage的repo
#   eg2:nouse,batch,reaf2/bdspbatch 会递进创建nouse和batch文件夹,最后以batch为根目录建立bdspbatch的repo
repos=(
  "git@github.com:tiesuiya/ConsoleProgressBar"
  "git@github.com:tiesuiya/sso"
  "git@github.com:tiesuiya/sso1"
  "level1,git@github.com:tiesuiya/sso-demo"
  "level1,git@github.com:tiesuiya/wx-mp-demo"
  "level1,level2,git@github.com:tiesuiya/node-login"
)

#########################脚本执行区########################
#debug
if false; then
  rm -rf d:/projects/readonly
fi
#默认仓库不存在则创建
if [ ! -d $reposRootPath ]; then
  mkdir $reposRootPath
fi
#进入默认仓库
cd $reposRootPath
#循环处理repo
for cfg in ${repos[@]}; do
  #{}&表示以子进程形式执行,实现并行处理
  {
    #以逗号拆分
    params=(${cfg//,/ })
    #参数长度
    length=${#params[@]}
    #循环处理repo参数
    for ((i = 0; i < $length; i = i + 1)); do
      #判断是否为最后一项
      if [ $(($length - 1)) = $i ]; then
        repo=${params[$i]}
        #执行开始
        echo $cfg" deal begin..."
        git clone $repo >/dev/null 2>&1
        #查找.git目录
        for dir in $(ls -d */); do
          if [ -d "$dir"/.git ]; then
            cd $dir
            #获取远程所有修改
            git fetch --all
            #回退代码,并与远程master保持一致
            git reset --hard origin/master
          fi
        done
        echo $cfg" deal finished!"
      else
        #分组文件夹
        gf=${params[$i]}
        #如果分组不存在则创建,并发执行时可能报错,忽略错误
        if [ ! -d $gf ]; then
          mkdir $gf >/dev/null 2>&1
        fi
        cd $gf
      fi
    done
  } &

  #清理非repos定义内容

done

#√并行刷新这些版本库
#√-如果分类目录不存在则创建
#-强制更新定义的repos(策略;本地切回master分支,并恢复内容和远程master完全一致,本地新增的代码、分支以及非repos定义内容将被抹掉)
#-TEST1:切换到其他分支,验证是否回切master
#-TEST2:切换到新增分支,验证是否删除,并验证是否回切master
#-TEST3:新增内容,验证是否删除
#-TEST4:修改的内容,验证是否复原
#-TEST5:修改的内容编辑中,验证是否依旧复原

wait
echo "all finished!"

标签:git,#-,批量,仓库,repos,更新,repo,master,com
来源: https://www.cnblogs.com/lhit/p/16560625.html