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