自动拉取 Gitlab 的所有仓库
自动拉取 Gitlab 的所有仓库
每次重装电脑或者一个新的gitlab项目需要拉取,就需要拉仓库
思路#
- 获取到自己有权限的所有分组
- 获取到分组下的仓库列表
- 自动创建二级目录并 使用 ssh clone 仓库
使用 gitlab 提供的 rest 接口
- api/v4/groups // 有权限的分组
curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" '${GITLAB_HOST}/api/v4/groups?owned=1&per_page=500&page=1' | jq -r '.[] | (.id|tostring) + " " + .path + " "+ .web_url'
- api/v4/groups/{proups_id}/projects // 指定分组下的项目列表
curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" '${GITLAB_HOST}/api/v4/groups/${group_id}/projects?per_page=500&page=1' | jq '.[].ssh_url_to_repo' | xargs -I{} git clone {}
#!/bin/env bash
GITLAB_TOKEN=""
GITLAB_HOST=""
# 获取所有有权限的分组,并打印出 id, 路径 ,url 地址, 描述信息
curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "${GITLAB_HOST}/api/v4/groups?per_page=500&page=1" | jq -r '.[] | (.id|tostring) + " " + .path + " "+ .web_url' > groups
cat groups | while read group;
do
group_id=`echo $group | cut -d " " -f 1`
group_path=`echo $group | cut -d " " -f 2`
echo $group_id, $group_path
if [ ! -d $group_path ]; then
mkdir $group_path
fi
echo "clone ${group_path} ....................."
sleep 2
cd $group_path
# 循环获取分组下所有的仓库
page=1
while [ true ];
do
projects=`curl --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "${GITLAB_HOST}/api/v4/groups/${group_id}/projects?per_page=500&page=${page}&owned=true" | jq '.[].ssh_url_to_repo'`
if [ -z "${projects}" ]; then
break
fi
for project_url in $projects; do
echo git clone "$project_url"
git clone "$project_url"
done
page=$((page + 1))
done
cd -
done
作者:Soul
出处:https://www.cnblogs.com/sooooooul/p/17455510.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix