需求:

  1. 输入work-dir 工作目录

  2. 扫描工作目录中的子目录

  3. 对每一个子目录, 判断是否是git repo

  4. 确认是git repo, 获取git origin remote-url

  5. 请求服务, 获取迁移地址:curl -X GET http://server/repo/query?old-origin=git%xxdef

  6. 判断repo是否迁移, 迁移则修改origin remote-url

  7. 如果修改了origin remote-url, 打印:目录 ${dir} 从${old-origin-url} 自动迁移到 ${new-origin-url}

  8. 完成退出

脚本如下:

# cat gitlab_repo_replace.sh

#!/bin/bash

# Author: huangjie
# time: --
# function: 用于递归判断某目录下的git仓库目录并修改远程仓库url。 set -e # help帮助函数
function help()
{
cat <<- EOF
Desc: 该程序需要输入一个目录的绝对路径或者相对路径作为参数,请确认输入的参数。
Usage: bash $ <directory name>
EOF
exit
} # urlencode编码函数
function urlencode() {
local length="${#1}"
for (( i = ; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-.~_-]) printf "$c" ;;
*) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
esac
done
} # 替换本地仓库的url为指定远程仓库
function replace_git_repo(){
cd $
old_origin_url=$(git remote -v | grep "fetch" | awk '{print $2}')
urlencode=$(urlencode ${old_origin_url})
new_origin_url=$(curl -X POST http://tools.test.xxx.com/repo/query\?old-origin\=${urlencode})
if [ "${new_origin_url}" != "" ]
then
echo "To replace the remote url,wait..."
git remote set-url origin $new_origin_url
echo "目录 $1 从 ${old_origin_url} 自动迁移到 ${new_origin_url}" >> ${root_dir}/git_replace_print.log
fi
} # 递归遍历目录下的子目录完成git仓库的替换
function getdir(){
for sub_dir in $(ls -al $ | grep "^d" | grep -Ewv "\.$|\.git"| awk '{print $NF}')
do
dir_or_gitrepo=$"/"${sub_dir}
if [ $(ls -al ${dir_or_gitrepo} | grep "^d" | grep -w "\.git" | wc -l) -eq ]
then
replace_git_repo ${dir_or_gitrepo}
else
echo "The ${dir_or_gitrepo} dir is not git repo dir!"
fi
getdir ${dir_or_gitrepo}
done
} # 主函数
function main(){
if [ $# -ne ]
then
help
exit
fi # 获取脚本工作目录参数
dir=$
if [ ${dir::} == "/" ]; then
root_dir=${dir}
elif [ ${dir::} == "./" ]; then
root_dir=$(cd $(dirname $); pwd)"/"${dir:}
else
root_dir=$(cd $(dirname $); pwd)"/"${dir}
fi # 遍历工作目录执行函数操作
getdir "${root_dir}"
} main "$@"

执行情况:

最新文章

  1. Python_Day_01(使用环境为Python3.0+)
  2. LayoutInflater.java (android-19)
  3. linux shell脚本守护进程监控svn服务
  4. dzzoffice注册开启
  5. LA 3521 Joseph&#39;s Problem
  6. Unicode 字符集及UTF-8 UTF-16编码
  7. CF 552C 进制转换
  8. JAVA课程设计个人博客 学生成绩管理 201521145048 林健
  9. How to resolve CSRF protection error while adding service through Ambari api
  10. 【DevExpress】邮箱制作小结
  11. Makefile ------ 在Makefile中进行宏定义-D
  12. C# Winform中慎用Application.DoEvents
  13. BSGS算法及其扩展
  14. oracle删除表垃圾
  15. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(七):集成 Druid 数据源
  16. linux安装mydumper软件包以及报错解决
  17. 完美解决Invalid layout of java.lang.String at value问题的方法
  18. Web程序中的懒加载异常说明及解决方案
  19. JavaScrip——练习(做悬浮框进一步:悬浮窗后缀悬浮窗【感觉这种方法比较麻烦】)
  20. HDU 3374 String Problem(最大最小表示+KMP)题解

热门文章

  1. C# Oracle数据库操作类
  2. WPF应用程序嵌入第三方exe
  3. QML于C++交互之信号与槽(signal&amp;slot )
  4. windows qt 使用c++ posix接口编写多线程程序(真神奇)good
  5. foruok安晓辉的《程序员,你好哇》,都很不错
  6. CSocket实现端口扫描
  7. 海康威视频监控设备Web查看系统(二):服务器篇
  8. Tido c++线段树知识讲解(转载)
  9. Protobuf 小试牛刀
  10. 阿里云主机CentOS7设置远程连接MySQL数据库