需求:

  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 "$@"

执行情况:

批量替换git目录的远程仓库URL地址脚本的更多相关文章

  1. 如何更改vs2013中git的远程仓库url地址

    可以通过修改Git库配置文件实现,请看下图:

  2. git如何删除远程仓库的某次错误提交

    git如何删除远程仓库的某次错误提交 如果远程仓库,能ssh访问,那就跟本地没什么区别   reset命令有3种方式   git reset --mixed 此为默认方式,不带任何参数的git res ...

  3. git 多个远程仓库

    有时候一个git项目需要使用多个远程库,如:测试环境+生产环境,国内加国外等 项目根目录下修改 .git/config 文件 vim .git/config 新增远程一个远程仓库   并为其命名 :如 ...

  4. [gitHub实践] git基础:远程仓库的使用

    [gitHub实践] git基础:远程仓库的使用 版权2019.6.2更新 git 基础 远程仓库的使用 git remote # 查看远程仓库 $ git remote # 克隆的仓库服务器默认名字 ...

  5. git如何切换远程仓库

    场景 工作时可能由于git仓库的变动,需要我们将已有代码切换仓库.比如我们先用的gitlab,现在要切换到github上. 迁移命令 代码迁移其实也很简单. 先保证本地代码是最新代码 $ git pu ...

  6. Myeclipse如何使用自带git工具向远程仓库提交代码(转)

    Myeclipse如何使用自带git工具向远程仓库提交代码 第一步:将改动的代码标记 项目右键:team->synchronize workspace 点击确定 项目右键>add to g ...

  7. git关联github远程仓库的问题

    git关联github远程仓库的时候,报fatal: remote origin already exists. 导致这个问题原因可能是之前关联的时候关联错了,再次关联就不行了. 解决办法是: 1.将 ...

  8. 解决git push至远程仓库失败的问题

    产生问题的原因: 远程仓库存在本地不存在的文件, 一个常见的例子是创建repository时勾选了README.md, 但此时本地还没有这个文件, 就会导致本地文件无法同步到远程仓库的问题. 解决方法 ...

  9. git指令-添加远程仓库

    git指令-添加远程仓库 首先在GitHub上创建属于你自己的远程仓库:例如我创建的远程仓库mybatis用于我最近保存的mybatis代码 目前,在GitHub上的这个learngit仓库还是空的, ...

随机推荐

  1. 小米手机销量暴跌36% 雷军做错了什么?(人的需求是复杂的,而不是仅仅是一个性价比;要做体验价格比,而不是配置价格比)good

    小米手机销量暴跌36% 雷军做错了什么? 日前,小米科技创始人雷军在美国马萨诸塞州剑桥市出席了第20届哈佛中国论坛开幕式并发表了演讲.在演讲中,雷军说但小米却只用两年半的时间一跃成为了中国第一,世界第 ...

  2. 一次C#和C++的实际应用性能比较(C++允许我们使用任何手段来提高效率,只要愿意做出足够的努力)

    05年时,在微软的Rico Mariani做了一次实际应用的C#和C++的性能比较.事情起源于微软著名的元老Raymond Chen(在下敬仰的超级牛人)用C++写了一个英汉词典程序,来描述讲解优化C ...

  3. ASP.NET 5 (vNext) 牛刀小試:自帶 DI 容器

    小引 在 ASP.NET 5(vNext)之前,亦即 MVC 4/5.Web API 2 的时代,MVC 与 Web API 框架彼此有非常相似的设计,却是以不同的代码来实现.现在,ASP.NET 5 ...

  4. 浅谈stylus与sass的对比

    all we konw , 这两个都是css的预编译工具,但虽然都是编译工具,但还是存在差别的,下面来讲讲其中的区别 1.变量 sass定义变量是以这种形式进行定义的$xxx:10;而stylus的定 ...

  5. winpcap在VS2012 Qt5 X64下的配置

    最近在学网络编程,想在windows下用Qt做个网络抓包工具,就要用到WinPcap,而我的电脑的系统是Win7 64位,qt版本是Qt 5.3.1 for Windows 64-bit (VS 20 ...

  6. 关于防范csrf攻击基于token鉴权

    在web开发中,之前都使用cookie + session方式来实现身份认证鉴权.但是现在前后端分离,以及终端有可能不支持cookie的情况下,一般都采用token方式.现在系统设计思路如下: 服务端 ...

  7. jqGrid使用经验分享(一)——jqGrid简单使用、json格式和jsonReader介绍

    广大的读者朋友们大家好,很高兴又可以在博客中和大家分享我的开发经验了. 此次,我准备向大家介绍一个非常好用的jQuery表格插件——jqGrid. 如果您在实际项目中遇到web端表格展示功能的需求,又 ...

  8. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立

    上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...

  9. SpringBoot2.1.6 整合CXF 实现Webservice

    SpringBoot2.1.6 整合CXF 实现Webservice 前言 最近LZ产品需要对接公司内部通讯工具,采用的是Webservice接口.产品框架用的SpringBoot2.1.6,于是采用 ...

  10. 18 HTML标签以及属性全

    基本结构标签: <HTML>,表示该文件为HTML文件 <HEAD>,包含文件的标题,使用的脚本,样式定义等 <TITLE>---</TITLE>,包含 ...