前段时间公司因为gitlab服务使用的用户密码太弱被黑了,所有库被删。
导致最近现在开始注重安全,写个小脚本在本地做个备份。
顺便温习了一下 "三剑客"。
我是直接在Windows环境下写的脚本,不得不感叹以下git for windows的功能是真的强大。awk sed grep vim bash你想要的工具统统都有。
具体参考gitlab
通过gitlab提供的api,又写了几个小脚本:批量 创建库,初始化库,推送,克隆,同步。
gitlab地址
部分代码
get_all.sh
#!/bin/bash
#同步gitlab
#按需设置以下变量key url
#对脚本传参控制功能
#get|获取所有库名到projects_name.txt
#clone|在./repository克隆所有库
#pull|同步./repository的所有库
key="serdgaaaaaaaaaaprC-L"
url="http://127.0.0.1/api/v4/"
get_name(){
num=`curl -si --header "PRIVATE-TOKEN: ${key}" "${url}projects/?per_page=1&page=1" | grep "X-Total:" | awk '{print $2}'`
let "num++"
echo "" > projects_name.txt
echo "------开始获取库名-----"
i=1
while (( i<$num ))
do
echo $i
curl -s --header "PRIVATE-TOKEN: ${key}" "${url}projects/?simple=true&per_page=1&page=$i" | awk -F'ssh_url_to_repo":"|","http_url_to_repo' '{print $2}' >> projects_name.txt
let "i++"
done
}
#获取所有库名
clone(){
projects=`cat projects_name.txt`
if [ -e repository ]
then
cd ./repository
else
mkdir ./repository
cd ./repository
fi
for name in ${projects}
do
echo "------开始克隆${name}-----"
git clone ${name}
done
}
#克隆所有库
pull(){
if [ -e repository ]
then
cd ./repository
else
echo "repository目录不存在,无法同步。请先克隆一遍所有库。(./get_all.sh clone)"
exit
fi
dirs=`ls`
for dir in ${dirs}
do
cd ${dir}
echo "------开始同步${dir}-----"
git pull
cd ..
done
}
#同步所有库
case $1 in
get)
get_name
;;
clone)
clone
;;
pull)
pull
;;
*)
echo -e "#对脚本传参控制功能\n#get|获取所有库名到projects_name.txt\n#clone|在./repository克隆所有库\n#pull|同步./repository的所有库"
esac
gitlab提供的获取所有projects名api默认一次只显示20条,要分页。
所有项目数和页数都在返回的http响应头里面,一开始还没找到,加了-i才看见。