一个备份gitlab的脚本

前段时间公司因为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才看见。

参考:

gitlab-api
git-for-windows

# gitlab  shell 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×