ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

批量更新仓库小工具

2022-08-08 09:35:16  阅读:233  来源: 互联网

标签:git #- 批量 仓库 repos 更新 repo master com


#!/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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有