批量替换git目录的远程仓库URL地址脚本
需求:
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地址脚本的更多相关文章
- 如何更改vs2013中git的远程仓库url地址
可以通过修改Git库配置文件实现,请看下图:
- git如何删除远程仓库的某次错误提交
git如何删除远程仓库的某次错误提交 如果远程仓库,能ssh访问,那就跟本地没什么区别 reset命令有3种方式 git reset --mixed 此为默认方式,不带任何参数的git res ...
- git 多个远程仓库
有时候一个git项目需要使用多个远程库,如:测试环境+生产环境,国内加国外等 项目根目录下修改 .git/config 文件 vim .git/config 新增远程一个远程仓库 并为其命名 :如 ...
- [gitHub实践] git基础:远程仓库的使用
[gitHub实践] git基础:远程仓库的使用 版权2019.6.2更新 git 基础 远程仓库的使用 git remote # 查看远程仓库 $ git remote # 克隆的仓库服务器默认名字 ...
- git如何切换远程仓库
场景 工作时可能由于git仓库的变动,需要我们将已有代码切换仓库.比如我们先用的gitlab,现在要切换到github上. 迁移命令 代码迁移其实也很简单. 先保证本地代码是最新代码 $ git pu ...
- Myeclipse如何使用自带git工具向远程仓库提交代码(转)
Myeclipse如何使用自带git工具向远程仓库提交代码 第一步:将改动的代码标记 项目右键:team->synchronize workspace 点击确定 项目右键>add to g ...
- git关联github远程仓库的问题
git关联github远程仓库的时候,报fatal: remote origin already exists. 导致这个问题原因可能是之前关联的时候关联错了,再次关联就不行了. 解决办法是: 1.将 ...
- 解决git push至远程仓库失败的问题
产生问题的原因: 远程仓库存在本地不存在的文件, 一个常见的例子是创建repository时勾选了README.md, 但此时本地还没有这个文件, 就会导致本地文件无法同步到远程仓库的问题. 解决方法 ...
- git指令-添加远程仓库
git指令-添加远程仓库 首先在GitHub上创建属于你自己的远程仓库:例如我创建的远程仓库mybatis用于我最近保存的mybatis代码 目前,在GitHub上的这个learngit仓库还是空的, ...
随机推荐
- PHP 的魔术方法及其应用
PHP中将所有__(两个下划线)开头的类方法作为魔术方法,这方法之所以称为魔术方法是因为其实现的功能就如变魔术一样感觉很神奇.在特定的事件下触发,这真的很酷. **__construct()** 这个 ...
- Qt:移动无边框窗体(使用Windows的SendMessage)
移动无边框窗体的代码网上很多,其原理都是一样的,但是是有问题的,我这里只是对其修正一下 网上的代码仅仅实现了两个事件 void EditDialog::mousePressEvent(QMouseEv ...
- C++虚函数表解析(图文并茂,非常清楚)( 任何妄图使用父类指针想调用子类中的未覆盖父类的成员函数的行为都会被编译器视为非法)good
C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有“多种形态”,这是一种泛型技术 ...
- qlineedit设置背景颜色(使用QPalette的方法不行,必须使用QSS)
使用QPalette的方法不行, ui->le_text->setAutoFillBackground(true);qDebug() << ui->le_text-> ...
- mysql自动安装教程说明
这里只说明了思路和方法 我们在安装程序里面可能需要安装的时候将mysql一起安装,那么我们就按照下面的顺序思路来. 首先我们安装的电脑上可能已经安装了mysql,所以我们的mysql服务就起一个名字, ...
- DataVeryLite入门教程(一) 配置篇
DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. ...
- python爬虫之PyQuery
# -*- coding: UTF-8 -*- from pyquery import PyQuery as pq import re from datetime import datetime,ti ...
- Spring Boot:集成Druid数据源
综合概述 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据 ...
- Mac sublime text3 安装插件
一.下载Mac版sublime text3 下载地址:http://www.pc6.com/mac/120663.html(参考) 2.安装后打开 1.在界面的最上端找到tools(英文版),选择第一 ...
- PHP和javascript判断用户使用的是手机还是电脑
PHP判断手机还是电脑 <?php $is_mobile = (is_mobile() == true) ? "手机" : "电脑"; echo '< ...