批量替换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仓库还是空的, ...
随机推荐
- Android零基础入门第61节:滚动视图ScrollView
原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期 ...
- PowerShell将Windows store应用程序安装为开发者模式
原文: PowerShell将Windows store应用程序安装为开发者模式 在本地部署Windows 商店应用程序时,我们会遇到Add-AppDevPackage.ps1脚本,这个脚本和所在安装 ...
- 在 Windows 10 专业版、企业版或教育版上设置展台
原文: 在 Windows 10 专业版.企业版或教育版上设置展台 Set up a kiosk on Windows 10 Pro, Enterprise, or Education 适用于 Win ...
- 使用VS2010开发Qt程序的4点经验(QT4到QT5的升级,更改sln文件,切换工程使用的Qt库,在VS的Solution Explorer视图中建立文件夹)
导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手.其中最重要的一点是,有 ...
- 条款16:成对使用new和delete时要使用相同的形式
请牢记: 如果在new表达式中使用[],必须在相应的delete表达式中也使用[]. new[] 对应 delete[] 如歌在new表达式中不适用[],一定不要在相应的delete表达式中使用[ ...
- jQuery框架 的四个入口函数
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 627.Swap Salary-(LeetCode之Database篇)
问题描述 给出下面的表,名为salary. id name sex salary 1 A m 2500 2 B f 1500 3 C m 5500 4 D f 500 要求执行一个UPDATE语句,将 ...
- RocketMQ(6)---发送普通消息(三种方式)
发送普通消息(三种方式) RocketMQ 发送普通消息有三种实现方式:可靠同步发送.可靠异步发送.单向(Oneway)发送. 注意 :顺序消息只支持可靠同步发送. GitHub地址: https:/ ...
- 【设计模式】结构型04桥接模式(Bridge Pattern)
学习地址:http://www.runoob.com/design-pattern/bridge-pattern.html 桥接模式(Bridge Pattern) 桥接模式(Bridge patte ...
- java开发工具必备神器——Notepad++和jd-gui下载安装使用
Notepad++是 Windows操作系统下的一套文本编辑器,有完整的中文化接口及支持多国语言编写的功能(UTF8技术).除了可以用来制作一般的纯文字说明文件,也十分适合编写计算机程序代码.Note ...