批量更新仓库小工具
作者:互联网
#!/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