gitlab:使用脚本批量下载项目,实现全项目检索

目的

当需要知道gitlab中所有项目是否存在某段代码时,gitlab免费版只提供了当个项目内的检索,当项目过多时一个个查太过繁琐。下面通过 GitLab API 将指定 Group 下的所有项目克隆到本地。此脚本会自动获取项目列表并逐一克隆它们,再在本地进行检索的方案。

准备工作

当前环境支持一下命令

  • curl:用于调用 GitLab API。

  • jq:解析 JSON 数据。
    *

    bash 复制代码
    # MAC 安装
    brew install jq
  • git:用于克隆项目。

gitlab上生成一个token令牌

  • read_api和read_repository权限

下载项目

sh脚本,替换参数

bash 复制代码
# 创建脚本文件
vim cloneGitlab.sh
bash 复制代码
#!/bin/bash

# 配置部分
GITLAB_URL="http://gitlab.example.com" # 替换为你的 GitLab 实例地址
GROUP_ID="12345"                        # 替换为你的 Group ID
PRIVATE_TOKEN="gitlab_token"      # 替换为你的 GitLab 私有访问令牌
CLONE_DIR="./gitlab-projects"           # 本地存储路径

# 创建存储目录
mkdir -p "$CLONE_DIR"

# 获取项目列表,100个
echo "Fetching project list from GitLab..."
PROJECTS=$(curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
  --silent \
  "$GITLAB_URL/api/v4/groups/$GROUP_ID/projects?per_page=100" | jq -r '.[].http_url_to_repo')

# 检查是否有项目返回
if [[ -z "$PROJECTS" ]]; then
  echo "No projects found or API request failed. Please check your configuration."
  exit 1
fi

# 克隆项目
echo "Cloning projects..."
cd "$CLONE_DIR" || exit

for PROJECT in $PROJECTS; do
  PROJECT_NAME=$(basename "$PROJECT" .git)
  
  if [[ -d "$PROJECT_NAME" ]]; then
    echo "Project $PROJECT_NAME already exists. Skipping..."
  else
    echo "Cloning $PROJECT..."
    git clone "$PROJECT"
  fi
done

echo "All projects cloned to $CLONE_DIR."
bash 复制代码
# 执行脚本
sh cloneGitlab.sh

检索内容

bash 复制代码
find . -name ".git" -execdir git --no-pager grep -n "your_key" \;
  • 显示检索的项目名称
bash 复制代码
find . -name ".git" -execdir sh -c '
    basename `pwd` && git --no-pager grep -n "bike_riding_order" 
' \;
相关推荐
鼎道开发者联盟15 小时前
鼎享会 | 从手工到自动化:OpenClaw改造GitLab内部协作流程的全过程
自动化·gitlab·openclaw
ℳ₯㎕ddzོꦿ࿐2 天前
告别手工发版:用 GitLab CI/CD 打通前后端自动化部署的“任督二脉”
ci/cd·自动化·gitlab
ℳ₯㎕ddzོꦿ࿐2 天前
实战:在 Linux 系统用 Docker-Compose 优雅部署 GitLab 及防坑指南
linux·docker·gitlab
源图客2 天前
Linux(CentOS9)服务器部署gitlab-ce-18.11.1-ce.0.el9.x86_64.rpm
linux·服务器·gitlab
ℳ₯㎕ddzོꦿ࿐2 天前
实战篇:结合 GitLab CI/CD 实现 Spring Cloud 微服务自动化部署与防坑指南
spring cloud·ci/cd·gitlab
菜萝卜子3 天前
【Git】GitLab 18.9 全局服务器钩子(Server Hooks)官方规范与落地实践
服务器·git·gitlab
lilili也4 天前
Git、VScode、GitLab
git·vscode·gitlab
郭龙_Jack4 天前
Gitlab CICD流水线设计
gitlab
MinterFusion6 天前
如果openKylin 2.0 SP2主机的IPv4地址改变,如何让GitLab正常运行
运维·gitlab·系统配置·系统维护·明德融创
Elivs.Xiang6 天前
ubuntu20中安装gitlab
linux·ubuntu·gitlab