git批量clone脚本

一、脚本代码

batchClone.sh

#!/bin/bash
#变量
#subgroup需要替换
subgroup='common-group';
#access_token需要替换,从gitlab右上角用户头像->Settings->Access Tokens获取
access_token='xxxxxxxxxxxxxxxxxx';
#获取项目列表接口地址
url="http://example.com/api/v4/projects?simple=true&membership=true&search=${subgroup}";

#获取项目列表
curl --header "PRIVATE-TOKEN: ${access_token}" $url -o projects.txt;
#遍历项目列表,克隆到当前目录下
cat projects.txt | sed 's/,/\
/g' | grep 'ssh_url_to_repo' | sed 's/"/\
/g' | grep 'git@' | while read line;
do
	git clone $line $(echo $line | awk -F "${subgroup}/" '{print $2}' | awk -F '.git' '{print $1}');
done;
#删除projects.txt
rm -rf projects.txt

二、补充说明

1.在windows和mac系统下测试通过。
2.主要逻辑是调用gitlab的projects接口获取项目列表,再执行git clone。
3.projects接口通过参数筛选返回项目列表,这里是通过search传参做了subgroup的筛选,具体传参见gitlab文档:https://docs.gitlab.com/ee/api/projects.html
4.若已有同名文件夹,会自动跳过(其实是报错已存在文件夹)。

三、遇到的问题

1.储备shell、linux知识

https://www.runoob.com/linux/linux-shell.html

2.mac系统下报错

1)permission denied
执行命令:

chmod 777 batchClone.sh

2)command not found
脚本顶部增加解释语言:#!/bin/bash
3)not such file
编写.sh文件的回车由CRLF改为LF
4)Too many arguments
sed命令在mac系统下有差异,回车要用\加真的回车(LF),不能用\n

解决方案参考文章:
https://blog.csdn.net/yalecaltech/article/details/107405961
https://www.cnblogs.com/mianbaoshu/p/14009550.html
https://www.cnblogs.com/xiaozhuangAna/p/9726670.html
https://blog.csdn.net/kakabuqinuo/article/details/99845797
https://blog.csdn.net/xavier679/article/details/82966953

你可能感兴趣的:(工作经验,git)