自动拉取 Gitlab 的所有仓库

自动拉取 Gitlab 的所有仓库

每次重装电脑或者一个新的gitlab项目需要拉取,就需要拉仓库

思路#

  1. 获取到自己有权限的所有分组
  2. 获取到分组下的仓库列表
  3. 自动创建二级目录并 使用 ssh clone 仓库

使用 gitlab 提供的 rest 接口

  1. 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'
  2. 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 国际」许可协议进行许可。

posted @   CK..Soul  阅读(443)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示