gitLab批量下载有权限的项目

news2025/3/10 10:58:42

前言

  • 参考 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一致

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevExpress Data Binding

DevExpress数据感知控件与任何数据访问技术&#xff08;ADO.NET、Entity Framework、XPO等&#xff09;兼容&#xff0c;并且可以显示来自实现IList、IBindingList或ITypedList接口的任何数据源的数据。有关更多详细信息&#xff0c;请参阅这些帮助主题&#xff1a;传统数据绑定…

excel两个数据表格,怎样实现筛选的联动?

如图&#xff0c;想要通过处理器或者像素条件进行筛选&#xff0c;形成一个右边图2的对比表&#xff0c;如何实现实现联动显示呢&#xff1f; 这个在excel里可以借用数据透视表切片器来完成。步骤如下&#xff1a; 1.添加表 选中数据区域中任意一个单元格&#xff0c;点击 插…

Query传递的参数需不需要加注解?加什么?为什么有的时候要加有的时候不加?

Query传递过来的参数可以加&#xff0c;也可以不加注解。如果要加&#xff0c;是在传递的参数名和后端的变量名不一致的情况下&#xff0c;要加RequestParam如果传递过来的参数名和后端的变量名一致&#xff0c;则可以不加RequestParam。 传递过来的数据如果是通过 Query 方式…

TLS指纹跟踪网络安全实践(C/C++代码实现)

TLS指纹识别是网络安全领域的重要技术&#xff0c;它涉及通过分析TLS握手过程中的信息来识别和验证通信实体的技术手段。TLS&#xff08;传输层安全&#xff09;协议是用于保护网络数据传输的一种加密协议&#xff0c;而TLS指纹则是该协议在实际应用中产生的独特标识&#xff0…

Desoutter电动拧紧扳手控制器维修看看这里

马头拧紧工具控制器作为现代工业生产中的重要设备&#xff0c;其稳定性和可靠性对于生产线的连续运行至关重要。然而&#xff0c;在使用过程中&#xff0c;由于各种原因&#xff0c;可能会出现马头电动拧紧控制器故障。【选择子锐机器人维修服务&#xff0c;您将享受以下优势和…

湖南大学CS-2023期末考试解析

前言 有幸作为助教参与信息院“周末夜校”讲解2023年试卷第2-3题&#xff08;汇编&#xff09;&#xff0c;借这个契机重新温习了一下这份试卷。 以下各部分的PPT由讲评助教分别完成并讲解。 1,6题 计科21杨助教2,3题 计科21甘晴void4,5题 智能21姚助教 由于2,3题过程较为繁…

HJS-DE1/3断电延时时间继电器 导轨安装 约瑟JOSEF

​HJS-DE断电延时时间继电器 HJS-DE1/3断电延时时间继电器 HJS-DE1/2断电延时时间继电器 HJS-DE断电延时时间继电器 用途 时间继电器HJS-DE1/3作为通电立即动作断电延时返回的元件&#xff0c;用于交流或直流保护和自动控制装置中&#xff0c;使被控元件得到所需延时。本继电…

10_Transformer预热---注意力机制(Attention)

1.1 什么是注意力机制(attention) 注意力机制&#xff08;Attention Mechanism&#xff09;是一种在神经网络中用于增强模型处理特定输入特征的能力的技术。它最早被应用于自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;特别是在机器翻译中&#xff0c;如Google的…

如何在Java中使用pdfbox,进行生成pdf操作,如文本居中,数据二列显示及图片显示?

pdfbox的基本使用 1. 添加 PDFBox 依赖 首先&#xff0c;确保你的项目中已经添加了 PDFBox 的 Maven 依赖。你可以使用类似以下的 Maven 依赖配置&#xff1a; <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId&g…

【第1章】Vue环境搭建

文章目录 前言一、安装Node1. 下载2. 安装3. 验证3.1 npm版本与Node.js版本3.2 验证环境 4. npm4.1 安装npm4.2 安装包4.3 全局安装包4.4 更新包4.5 删除包4.6 查看已安装的包4.7 初始化package.json 5. 国内源 二、安装Visual Studio Code1.下载2.安装3.安装Vue - Official 三…

Nuxt3 实战 (八):优雅的实现暗黑主题模式

前言 在 Nuxt3 中要实现暗黑模式&#xff0c;需要用到一个库&#xff1a;color-mode&#xff0c;它可以帮助我们很轻易地实现暗黑模式切换。 具体使用 安装 nuxtjs/color-mode 依赖&#xff1a; pnpm add nuxtjs/color-mode -D打开 nuxt.config.ts 配置文件注入依赖&#x…

【Linux】shell脚本变量——系统变量、环境变量和用户自定义变量

系统变量 系统变量是由系统预设的&#xff0c;它们通常在系统启动时被加载&#xff0c;并对所有用户和所有shell实例都有效。这些变量通常控制着系统的行为和配置&#xff0c;例如PATH&#xff08;命令搜索路径&#xff09;、HOME&#xff08;用户主目录&#xff09;等。系统变…

美团强势领涨恒指,港股即将迎来触底反弹?

恒指早间低开低走&#xff0c;持续低位徘徊&#xff0c;一度试探万八关口&#xff0c;最低见17994点&#xff0c;市场情绪表现疲弱&#xff0c;大型科技股普遍走低&#xff0c;但主要指数午后回升&#xff0c;恒生科技指数率先转涨&#xff0c;美团(3690.HK)涨超4%领涨成分股&a…

Java毕业设计 基于springboot vue大学生助学贷款管理系统

Java毕业设计 基于springboot vue大学生助学贷款管理系统 SpringBoot 大学生助学贷款管理系统 功能介绍 学生 登录 注册 个人中心 修改密码 个人信息 助学贷款 申请贷款 放贷信息 还贷信息 公告资讯 学校 登录 注册 个人中心 修改密码 个人信息 助学贷款管理 申请贷款管理 公…

TCP四次挥手全过程详解

TCP四次挥手全过程 有几点需要澄清&#xff1a; 1.首先&#xff0c;tcp四次挥手只有主动和被动方之分&#xff0c;没有客户端和服务端的概念 2.其次&#xff0c;发送报文段是tcp协议栈的行为&#xff0c;用户态调用close会陷入到内核态 3.再者&#xff0c;图中的情况前提是双…

LeetCode:419. 甲板上的战舰(遍历 Java)

目录 419. 甲板上的战舰 题目描述&#xff1a; 实现代码与解析&#xff1a; 遍历 原理思路&#xff1a; 419. 甲板上的战舰 题目描述&#xff1a; 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 X 或者是一个空位 . &…

【机器学习300问】111、解释目标检测的基本概念?

一、目标检测基本概念 &#xff08;1&#xff09;目标检测的定义 目标检测是计算机视觉领域的一项关键任务&#xff0c;它旨在识别图像或视频帧中出现的所有感兴趣目标&#xff08;物体&#xff09;的位置和类别。简而言之&#xff0c;目标检测不仅需要判断图像中存在哪些类型…

LVS – NAT 模式集群构建

目录 1 环境准备 1.1 准备四台服务器 1.2 IP与网关均按照下图配置 1.3 网卡配置 1.4 real server 安装 web服务 1.5 安装ipvsadm 管理工具 2 使用ipvsadm管理LVS 2.1 创建集群指定使用的算法 2.2 添加真实服务器指定工作原理 2.3 查看是否正确创建集群 3 测试 3.1 使用tcpdump…

6.Hugging Face Transformers 快速入门

Hugging Face Transformers 库独特价值 丰富的预训练模型:提供广泛的预训练模型,如BERT、GPT、T5等,适用于各种NLP任务。易于使用:设计注重易用性,使得即使没有深厚机器学习背景的开发者也能快速上手。最新研究成果的快速集成:经常更新,包含最新的研究成果和模型。强大的…

SQL进阶day12——高级条件语句

1筛选限定昵称成就值活跃日期的用户 我的代码&#xff1a;答案不对 select uid,u.nick_name,u.achievement from exam_record er join practice_record pr using(uid) join user_info u using(uid) where u.nick_name like "牛客%号" and u.achievement between …