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

gitLab批量下载有权限的项目

前言

  • 参考 https://www.jianshu.com/p/b3d4e5cee835

  • 适用于git私服拉取个人所涉及权限的代码,方便有多个项目权限的人快速拉取自己所有权限的代码。

  • 默认生成目录结构与gitlab一致

步骤一:获取权限你的代码权限文件d

从gitlab私服生成所有你有权限的代码信息

请求地址:

http://gitlab.dstcar.com//api/v4/projects?simple=true&per_page=100&page=1

postman方式获取

cookies自己登录gitlab生成

gitlab限制每次只能拉100条数据,超过100条自己分页处理

获取cookies

 添加cookies

请求成功后保存json文件到指定地方(步骤二会用到) eg:放到D:\\gitlab_projects.json

 

步骤二:执行java代码

以下根据个人所需修改对应代码,一般只需要修改下载fileName和srcDir参数

  • 备注:有现成springboot项目你直接生成一个单元测试文件执行执行main方法,没有的话自己新建一个项目执行

  • import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.nio.charset.Charset;import org.springframework.util.StreamUtils;import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;/****/
    public class TestGitlabData {public static void main(String[] args) {//gittlab获取的权限文件String fileName = "D:\\gitlab_projects.json";String jsonStr = readJsonFile(fileName);JSONArray projects = JSON.parseArray(jsonStr);//指定需要下载的分支String branchName = "master";//尝试切换的分支String tryCheckOutBranchName = "develop";//指定下载后输出的地址String srcDir = "D:\\code";File execDir = new File(srcDir);if (!execDir.exists()) {boolean result = execDir.mkdirs();System.out.println("execDir.mkdirs = " + result);}int projectNum = 0;for (int i = 0; i < projects.size(); i++) {JSONObject prj = projects.getJSONObject(i);//项目地址
    //            String httpUrlToRepo = prj.getString("http_url_to_repo");String httpUrlToRepo = prj.getString("ssh_url_to_repo");//项目路径
    //            String pathWithNamespace = prj.getString("path_with_namespace");String pathWithNamespace = prj.getString("name_with_namespace").replaceAll(" ", "");System.out.println("拉取projectNum = " + ++projectNum);gitClone(branchName, httpUrlToRepo, pathWithNamespace, execDir);File tryDir = new File(srcDir + "\\" + pathWithNamespace);if (tryDir.exists()) {gitTryCheckOutBranch(tryCheckOutBranchName, tryDir);}}}private static void gitTryCheckOutBranch(String tryCheckOutBranchName, File execDir) {String command = String.format("git checkout  %s  ", tryCheckOutBranchName);try {System.out.println("===========start==================");System.out.println("start exec command : " + command);//执行命令行Process exec = Runtime.getRuntime().exec(command, null, execDir);exec.waitFor();String successResult = StreamUtils.copyToString(exec.getInputStream(), Charset.forName("UTF-8"));String errorResult = StreamUtils.copyToString(exec.getErrorStream(), Charset.forName("UTF-8"));System.out.println("successResult: " + successResult);System.out.println("errorResult: " + errorResult);System.out.println("============end================");} catch (Exception e) {e.printStackTrace();}}static void gitClone(String branchName, String httpUrlToRepo, String pathWithNamespace, File execDir) {String command = String.format("git clone -b %s %s %s ", branchName, httpUrlToRepo, pathWithNamespace);try {System.out.println("===========start==================");System.out.println("start exec command : " + command);//执行命令行Process exec = Runtime.getRuntime().exec(command, null, execDir);exec.waitFor();String successResult = StreamUtils.copyToString(exec.getInputStream(), Charset.forName("UTF-8"));String errorResult = StreamUtils.copyToString(exec.getErrorStream(), Charset.forName("UTF-8"));System.out.println("successResult: " + successResult);System.out.println("errorResult: " + errorResult);System.out.println("============end================");} catch (Exception e) {e.printStackTrace();}}public static String readJsonFile(String fileName) {String jsonStr = "";try {File jsonFile = new File(fileName);FileReader fileReader = new FileReader(jsonFile);Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");int ch = 0;StringBuffer sb = new StringBuffer();while ((ch = reader.read()) != -1) {sb.append((char) ch);}fileReader.close();reader.close();jsonStr = sb.toString();return jsonStr;} catch (IOException e) {e.printStackTrace();return null;}}
    }

    实际效果为下来所有你有权限的代码并且尝试切换develop环境(你想尝试换其他环境也可以自行修改代码参数)

    目录结构跟gitlab一致

 

相关文章:

gitLab批量下载有权限的项目

前言 参考 https://www.jianshu.com/p/b3d4e5cee835 适用于git私服拉取个人所涉及权限的代码&#xff0c;方便有多个项目权限的人快速拉取自己所有权限的代码。 默认生成目录结构与gitlab一致 步骤一:获取权限你的代码权限文件d 从gitlab私服生成所有你有权限的代码信息 …...

解决 kali 中使用 vulhub 拉取不到镜像问题

由于默认情况下&#xff0c;访问的镜像是国外的&#xff0c;而从 2023 年开始&#xff0c;docker 的镜像网站就一直访问不了&#xff0c;所以我们可以把镜像地址改成国内的阿里云镜像地址。 1、在 cd /etc/docker/目录下创建或修改daemon.json文件 sudo touch daemon.json 2、在…...

CSS3 简介

CSS3 简介 CSS3&#xff0c;即层叠样式表的第三代&#xff0c;是网页设计和开发中不可或缺的技术之一。它为HTML元素提供了更加丰富和灵活的样式定义&#xff0c;使得网页不仅结构清晰&#xff0c;而且外观精美、交互性强。CSS3继承了CSS2的基本特性&#xff0c;并引入了许多新…...

springboot事务管理的机制是什么

SpringBoot的事务管理机制实质上是基于Spring框架的事务处理机制。其主要目的是确保一系列数据库操作要么全部成功&#xff0c;要么全部失败&#xff08;回滚&#xff09;&#xff0c;从而维护数据的完整性和一致性。 SpringBoot事务管理遵循ACID四大特性&#xff1a; 1、原子…...

Linux下tar命令解压缩

tar 命令是 Unix 和 Linux 系统中用来创建归档文件以及提取归档文件的工具。它通常用于备份文件或将多个文件和目录打包成一个单独的归档文件。默认情况下&#xff0c;tar 不会对文件进行压缩&#xff0c;但可以通过结合其他压缩工具&#xff08;如 gzip 或 bzip2&#xff09;来…...

当财政支持减弱时,国有企业如何实现降本增效?

随着市场环境的不断变化和上级市场化政策要求的不断推进&#xff0c;部分国有企业面临着双重压力&#xff0c;一方面&#xff0c;市场的快速变革要求企业不断创新、提升竞争力&#xff1b;另一方面&#xff0c;在响应上级市场化转型的号召下&#xff0c;财政支持的减弱成为了许…...

大模型「训练」与「微调」概念详解【6000字长文】

本文你将学到什么 1、大模型预训练与微调的基本流程 2、预训练、训练、后期预训练、微调的区别 3、大模型训练与微调的一些概念&#xff0c;如&#xff1a; Post-pretrain、SFT、RLHF、模型对齐、Lora、Q-Lora、大模型量化、微调指标、微调参数、大模型评测指标 预训练与微…...

JVM 垃圾回收器

一、垃圾回收器类型 如果说垃圾收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回收的具体 实现。下图展示了7种作用于不同分代的收集器&#xff0c;其中用于回收新生代的收集器 包括Serial、PraNew、Parallel Scavenge&#xff0c;回收老年代的收集器包括Seri…...

Spring IOC 容器的构建流程?

Spring loc (Inversion of Control) 是一种设计模式&#xff0c;其中对象的创建和依赖关系由框架管理&#xff0c;而不是由应用程序直接管理。Spring loc容器是Spring框架的核心&#xff0c;它使用loC模式来管理应用程序中的对象 Spring loC容器的构建过程如下: 1.配置元数据…...

官方文档 搬运 MAXMIND IP定位 mysql导入 简单使用

官方文档地址&#xff1a; 官方文档 文件下载 1. 导入mysql可能报错 Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 查看配置 SHOW GLOBAL VARIABLES LIKE %secure%;secure_file_priv 原来…...

PHP入门教程1:PHP的基础概念和基本语法

本文将从基础开始&#xff0c;介绍PHP的基础概念和基本语法。 PHP简介环境搭建基本语法变量和常量数据类型操作符常见错误和调试方法 1. PHP简介 PHP&#xff0c;全称是 “PHP: Hypertext Preprocessor”&#xff0c;是一种开源的通用脚本语言&#xff0c;尤其适用于Web开发…...

头歌资源库(5)求阶乘问题

一、 问题描述 请输入一个50至100之间的整数n&#xff0c;求解n! 二、算法思想 输入一个50至100之间的整数n。声明一个变量result&#xff0c;并将其初始化为1&#xff0c;用于保存n的阶乘。使用一个循环&#xff0c;从1到n&#xff0c;循环变量为i。在循环中&#xff0c;将…...

09:整型与布尔型的转换

OpenJudge - 09:整型与布尔型的转换 描述 将一个整型变量的值赋给一个布尔型变量&#xff0c;再将这个布尔型变量的值赋给一个整型变量&#xff0c;得到的值是多少&#xff1f; 输入 一个整型范围内的整数&#xff0c;即初始时整型变量的值。 输出 一个整数&#xff0c;经过上述…...

51单片机STC89C52RC——2.1 独立按键控制LED亮灭

目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;独立按键 2.1 独立按键位置 2.2 独立按键电路图 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 六&#xff0c;效果 目的 当独立K1按键按下时LED D1 点亮&#x…...

系统架构师考点--计算机硬件

大家好。今天我总结一下计算机硬件的一些考点。 一、中央处理单元&#xff08;CPU&#xff09; 我们知道&#xff0c;计算机的基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。其中运算器、控制器等部件被集成在一起统称为中央处理单元(Central Proce…...

vite-plugin-mock前端自行模拟接口返回数据的插件

vite-plugin-mock前端自行模拟接口返回数据的插件 安装导入、配置&#xff08;vite.config.js&#xff09;使用目录结构/mock/user.js具体在页面请求中的使用 注意事项 中文文档&#xff1a;[https://gitcode.com/vbenjs/vite-plugin-mock/blob/main/README.zh_CN.md) 参考其他…...

网络安全知识全景地图V1.0 - 20240616更新

网络安全领域的知识全景涵盖了从基础概念到高级技术的广泛内容。博主基于自身十年多的工作经验结合CISSP认证官方教材按照不同的主题和层次梳理出如下高层次的概览地图&#xff0c;可以帮助个人和组织理解网络安全领域的主题。 1.1. 基础理论 1.1.1. 网络安全概述 网络安全的…...

力扣19. 删除链表的倒数第N个节点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例…...

电脑找不到vcruntime140_1.dll的原因分析及5种解决方法分享

电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;在使用电脑的过程中&#xff0c;我们常常会遇到一些常见的问题&#xff0c;其中之一就是电脑显示vcruntime140_1.dll丢失。那么&#xff0c;这个问题是怎么回事呢&#xff1f;又有哪些解决方法呢&#xff1f;如何…...

洗地机哪个牌子质量好,性价比高?一文盘点市场热门选择

近年来&#xff0c;洗地机因为其能快速的解决我们耗时、费力又繁琐的地板清洁工作&#xff0c;备受人们的喜爱。但面对多款设备不同功能和特点相近的洗地机&#xff0c;你可能会疑惑&#xff1a;“洗地机哪个牌子质量好&#xff1f;”&#xff0c;如果你正在寻找一款高效、便捷…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...