Gitlab API 自动拉取有权限的所有仓库

2021-06-10 [输出/作品] #Shell #Gitlab
更新日志
2021-06-11 更新分类、标签
2023-03-27 拉取多个分组时自动创建目录

Gitlab 提供了完善的 HTTP API 来获取分组、项目信息。

API 信息

依赖

脚本

  1. 获取分组列表
  2. 依次获取每个分组下的有权限的所有仓库

暂不支持翻页: 若分组超过100或者分组下的项目超过100个,则会被忽略。

#!/bin/bash

# Gitlab 服务地址
GITLAB_HOST="Gitlab.org"

# 去 $GITLAB_HOST/profile/personal_access_tokens 创建一个TOKEN
TOKEN="你的TOKEN"

QUERY_PARAM="min_access_level=30&simple=true&per_page=100&page=1"
GROUPS_URL="$GITLAB_HOST/api/v4/groups?all_available=false&top_level_only=false&$QUERY_PARAM"
PROJECTS_URL="$GITLAB_HOST/api/v4/groups/%s/projects?$QUERY_PARAM"

fetch() {
  curl --silent --header "PRIVATE-TOKEN: $TOKEN" "$GROUPS_URL" \
    | jq .[].name | sed 's/"//g' | sort | uniq \
    | xargs printf $PROJECTS_URL'\n' $1 \
    | xargs curl --silent --header "PRIVATE-TOKEN: $TOKEN" $1 \
    | jq '. | select(type == "array") | .[] | select(has("ssh_url_to_repo")) | .ssh_url_to_repo' \
    | sed 's/"//g' | sort | uniq \
    | awk -F'[:/]' '{ url=$0; project=sub(".git","",$3); cmd="mkdir -p "$2" && git clone --depth 1 "url" "$2"/"$3; system(cmd)}'
}

fetch
文章作者:eightpigs
创作时间:2021-06-10
更新时间:2023-03-27
许可协议:CC by-nc-nd 4.0