• 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方法,没有的话自己新建一个项目执行

      1. import java.io.File;
      2. import java.io.FileInputStream;
      3. import java.io.FileReader;
      4. import java.io.IOException;
      5. import java.io.InputStreamReader;
      6. import java.io.Reader;
      7. import java.nio.charset.Charset;
      8. import org.springframework.util.StreamUtils;
      9. import com.alibaba.fastjson.JSON;
      10. import com.alibaba.fastjson.JSONArray;
      11. import com.alibaba.fastjson.JSONObject;
      12. /**
      13. *
      14. */
      15. public class TestGitlabData {
      16. public static void main(String[] args) {
      17. //gittlab获取的权限文件
      18. String fileName = "D:\\gitlab_projects.json";
      19. String jsonStr = readJsonFile(fileName);
      20. JSONArray projects = JSON.parseArray(jsonStr);
      21. //指定需要下载的分支
      22. String branchName = "master";
      23. //尝试切换的分支
      24. String tryCheckOutBranchName = "develop";
      25. //指定下载后输出的地址
      26. String srcDir = "D:\\code";
      27. File execDir = new File(srcDir);
      28. if (!execDir.exists()) {
      29. boolean result = execDir.mkdirs();
      30. System.out.println("execDir.mkdirs = " + result);
      31. }
      32. int projectNum = 0;
      33. for (int i = 0; i < projects.size(); i++) {
      34. JSONObject prj = projects.getJSONObject(i);
      35. //项目地址
      36. // String httpUrlToRepo = prj.getString("http_url_to_repo");
      37. String httpUrlToRepo = prj.getString("ssh_url_to_repo");
      38. //项目路径
      39. // String pathWithNamespace = prj.getString("path_with_namespace");
      40. String pathWithNamespace = prj.getString("name_with_namespace").replaceAll(" ", "");
      41. System.out.println("拉取projectNum = " + ++projectNum);
      42. gitClone(branchName, httpUrlToRepo, pathWithNamespace, execDir);
      43. File tryDir = new File(srcDir + "\\" + pathWithNamespace);
      44. if (tryDir.exists()) {
      45. gitTryCheckOutBranch(tryCheckOutBranchName, tryDir);
      46. }
      47. }
      48. }
      49. private static void gitTryCheckOutBranch(String tryCheckOutBranchName, File execDir) {
      50. String command = String.format("git checkout %s ", tryCheckOutBranchName);
      51. try {
      52. System.out.println("===========start==================");
      53. System.out.println("start exec command : " + command);
      54. //执行命令行
      55. Process exec = Runtime.getRuntime().exec(command, null, execDir);
      56. exec.waitFor();
      57. String successResult = StreamUtils.copyToString(exec.getInputStream(), Charset.forName("UTF-8"));
      58. String errorResult = StreamUtils.copyToString(exec.getErrorStream(), Charset.forName("UTF-8"));
      59. System.out.println("successResult: " + successResult);
      60. System.out.println("errorResult: " + errorResult);
      61. System.out.println("============end================");
      62. } catch (Exception e) {
      63. e.printStackTrace();
      64. }
      65. }
      66. static void gitClone(String branchName, String httpUrlToRepo, String pathWithNamespace, File execDir) {
      67. String command = String.format("git clone -b %s %s %s ", branchName, httpUrlToRepo, pathWithNamespace);
      68. try {
      69. System.out.println("===========start==================");
      70. System.out.println("start exec command : " + command);
      71. //执行命令行
      72. Process exec = Runtime.getRuntime().exec(command, null, execDir);
      73. exec.waitFor();
      74. String successResult = StreamUtils.copyToString(exec.getInputStream(), Charset.forName("UTF-8"));
      75. String errorResult = StreamUtils.copyToString(exec.getErrorStream(), Charset.forName("UTF-8"));
      76. System.out.println("successResult: " + successResult);
      77. System.out.println("errorResult: " + errorResult);
      78. System.out.println("============end================");
      79. } catch (Exception e) {
      80. e.printStackTrace();
      81. }
      82. }
      83. public static String readJsonFile(String fileName) {
      84. String jsonStr = "";
      85. try {
      86. File jsonFile = new File(fileName);
      87. FileReader fileReader = new FileReader(jsonFile);
      88. Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
      89. int ch = 0;
      90. StringBuffer sb = new StringBuffer();
      91. while ((ch = reader.read()) != -1) {
      92. sb.append((char) ch);
      93. }
      94. fileReader.close();
      95. reader.close();
      96. jsonStr = sb.toString();
      97. return jsonStr;
      98. } catch (IOException e) {
      99. e.printStackTrace();
      100. return null;
      101. }
      102. }
      103. }

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

      目录结构跟gitlab一致

     

  • 相关阅读:
    怎么练习黑客技术不会犯法?这6个网站也许可以帮到你,收藏就完事了
    LVGL_基础控件Switch_Button
    c++day3
    SpringBoot保姆级教程(八)热部署 & 整合MyBatis
    leetcode写题笔记 -- 罗马数字转整数
    Python利用pandas、request写自动化读取测试用例脚本
    2024 年 AI 辅助研发趋势
    Fragment.setUserVisibleHint()懒加载过时问题优化
    六、TCP实现聊天
    Linux应用层例程3 输入设备应用编程
  • 原文地址:https://blog.csdn.net/qq_33816292/article/details/139600841