当前位置: 首页 > article >正文

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

目的

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

准备工作

当前环境支持一下命令

  • curl:用于调用 GitLab API。
  • jq:解析 JSON 数据。
    • # MAC 安装
      brew install jq
  • git:用于克隆项目。

gitlab上生成一个token令牌

  • read_api和read_repository权限

下载项目

sh脚本,替换参数

# 创建脚本文件
vim cloneGitlab.sh
#!/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."
# 执行脚本
sh cloneGitlab.sh

检索内容

find . -name ".git" -execdir git --no-pager grep -n "your_key" \;
  • 显示检索的项目名称
find . -name ".git" -execdir sh -c '
    basename `pwd` && git --no-pager grep -n "bike_riding_order" 
' \;


http://www.kler.cn/a/406179.html

相关文章:

  • Spring cloud 一.Consul服务注册与发现(4)
  • AWS CLI
  • 使用过vue之后,对vue的有了更深入的理解?
  • CSS3_BFC(十二)
  • 【算法】计算程序执行时间(C/C++)
  • 从复合字符串中分割并解析多个JSON字符串
  • 关于Linux中线程优先级的问题探讨
  • 【Linux】-学习笔记04
  • [ruby on rails] 安装docker
  • 量化交易系统开发-实时行情自动化交易-4.3.1.跨市场套利策略实现
  • JAVA中的Lamda表达式
  • Lua 实现继承的一种方式
  • n、nvm、nrm、pnpm、yarn各种指令大全
  • 设计模式之 责任链模式
  • .net 7.0 解决“The keyword field is required”的问题
  • 面向服务的软件工程——巨详细讲解商务流程建模符号 (BPMN),一篇章带你入门BPMN!!!(week1)
  • 在win10环境部署opengauss数据库(包含各种可能遇到的问题解决)
  • 基于RTEMS项目学习waf build system
  • 「漏洞复现」ArcGIS 地理信息系统 任意文件读取漏洞
  • pycharm在使用conda虚拟环境时Terminal爆红问题
  • 2.STM32之通信接口《精讲》之IIC通信---软件实现IIC《深入浅出》面试必备!
  • Javaee文件的io操作
  • 使用 PyTorch 实现并训练 VGGNet 用于 MNIST 分类
  • Frida反调试对抗系列(二)
  • pcb元器件选型与焊接测试时的一些个人经验
  • SELinux知识点