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一致

 

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值