Java 调用 GitLabAPI 获取仓库里的文件件 提交记录

这篇具有很好参考价值的文章主要介绍了Java 调用 GitLabAPI 获取仓库里的文件件 提交记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 需求

项目组 需要做统计,获取每个开发人员的代码提交次数,提交时间,提交人等等,因代码在GitLab上管理,所以需要调用GitLabAPI来获取。

2. 开发

API官网:https://docs.gitlab.com/ee/api/

2.1 创建自定义令牌

自定义令牌是为了后续接口访问有权限而建立的。
创建 GitLab 个人访问令牌的方法如下:

  1. 在任何页面的右上角,单击您的个人资料照片,然后单击 “Settings(设置)”。
  2. 在左侧边栏中,单击 “Developer settings(开发者设置)”。
  3. 在左侧边栏中,单击 “Personal access tokens(个人访问令牌)”。
  4. 单击 “Generate new token(生成新令牌)”。
  5. 给令牌一个描述性名称。
  6. 选择要授予此令牌的作用域或权限。
  7. 要使用令牌从命令行访问仓库,请选择 “repo(仓库)”。
  8. 单击 “Generate token(生成令牌)”。
  9. 单击 “将令牌复制到剪贴板”。

请注意,离开此页面后,您将无法再次看到令牌,所以一定要保留好令牌。像对待密码一样对待您的令牌,确保其机密性。

2.2 找项目ID

第一步需要找项目的ID,这个不知道怎么找,我的方法是在gitlab项目上打开F12看控制台,看他们的接口访问的适合用的ID。
如图:110 就是项目ID,拿着项目ID能办很多事儿。
Java 调用 GitLabAPI 获取仓库里的文件件 提交记录,java,java,python,运维,gitlab

2.3 调接口

直接上代码了:

@Slf4j
@Service
public class GitLabApiCallService {

    @Resource(name = "initRestTemplate")
    private RestTemplate restTemplate;

    /**
     * 获取 项目下的文件 下的文件
     * @return
     */
    public JSONArray getTree(Integer page) throws Exception{
        String gitLabToken = ModelConfig.getGitLabToken();
        String gitLabApiUrl = ModelConfig.getGitLabApiUrl();
        String projectId = "110";
        String directoryPath = "aaaaa";
        String baseUrl = String.format("%s/projects/%s/repository/tree?ref=master&path=%s&per_page=100&page="+page,
                gitLabApiUrl,projectId,directoryPath);
        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        headers.set("Private-Token",gitLabToken);
        HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(null, headers);
        // 执行
        log.debug("url:{} , requestEntity: {} ", baseUrl, requestEntity);
        ResponseEntity<String> response = restTemplate.exchange(baseUrl, HttpMethod.GET, requestEntity, String.class);
        // 处理返回值
        if (response.getStatusCode() == HttpStatus.OK) {
            log.info("GET request successful");
            String body = response.getBody();
            if(StrUtil.isNotBlank(body)){
                JSONArray jsonArray = JSONArray.parseArray(body);
                log.debug("结果:{}",jsonArray);
                return jsonArray;
            } else {
                return null;
            }
        } else {
            log.error(" GET request failed");
            return null;
        }
    }

    /**
     * 查看提交记录
     * @return
     */
    public JSONArray getCommit(String filePath)  throws Exception {
        String gitLabToken = ModelConfig.getGitLabToken();
        String gitLabApiUrl = ModelConfig.getGitLabApiUrl();
        String projectId = "110";
        String directoryPath = "aaaa";
        Integer per_page = 201000;
        String baseUrl = String.format("%s/projects/%s/repository/commits?ref_name=master&path=%s",
                gitLabApiUrl,projectId,filePath);
        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        headers.set("Private-Token",gitLabToken);

        // 绑定请求头
        HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);

        // 执行
        log.debug("url:{} , requestEntity: {} ", baseUrl, requestEntity);
        ResponseEntity<String> response = restTemplate.exchange(baseUrl, HttpMethod.GET, requestEntity, String.class);
        // 处理返回值
        if (response.getStatusCode() == HttpStatus.OK) {
            log.info("GET request successful");
            String body = response.getBody();
            if(StrUtil.isNotBlank(body)){
                JSONArray jsonArray = JSONArray.parseArray(body);
                log.debug("结果:{}",jsonArray);
                return jsonArray;
            } else {
                return null;
            }
        } else {
            log.error("GET request failed");
            return null;
        }
    }
}

String gitLabToken = ModelConfig.getGitLabToken();
String gitLabApiUrl = ModelConfig.getGitLabApiUrl();
这些都是配置的全局变量,可以根据自己的环境配置。

上面的代码只是个例子:很多接口类同。

需要注意的是分页最多返回100条,如果需要获取全部数据,需要自己写递归啊循环啊啥的怎么方便怎么来。

若有错误,希望大佬指出。
对你有帮助给点个👍再走呗。文章来源地址https://www.toymoban.com/news/detail-730940.html

到了这里,关于Java 调用 GitLabAPI 获取仓库里的文件件 提交记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Gitlab 实现仓库完全迁移,包括所有提交记录、分支、标签

    如果你和我一样,不喜欢命令行,就看其他方案。 选中要导出的项目,选择设置-expand-export project 刷新一下,直接下载 新建项目并导入 如果你是打杂的,没管理员权限,这步也不行。 在 gitlab 仓库页面,点击下载,注意使用 gz 格式!!! 去往你的新主体的 gitlab页面开始仓

    2024年03月28日
    浏览(49)
  • git命令使用 将git仓库克隆到另一个仓库,并保留原来的提交记录

    君子拙于不知己,而信于知己。——司马迁   清屏:clear 查看当前面板的路径:pwd 查看当前面板的文件:ls 创建文件夹:mkdir 文件夹名 创建文件:touch 文件名 删除文件夹:rm -rf 文件夹名 删除文件:rm -f 文件名 移动文件/文件夹:mv 需移动文件/文件名 目标文件夹/(../上级)  

    2024年02月12日
    浏览(52)
  • 使用Git将本地文件提交到远程仓库 使用Git将本地文件提交到远程仓库

    使用Git将本地文件提交到远程仓库 现在要将本地代码推到git远程仓库保存,可以提交和拉取操作 本地项目已经创建 git远程仓库已经建(github、gitee都行) 操作如下: 1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2、把文件添加到版本库中,使

    2024年02月13日
    浏览(55)
  • 【笔记】Git|将git仓库中所有的 commit 合成一个,清空所有 git 提交记录

    在对代码进行开源时,我们往往并不希望代码开发过程中的提交记录被其他人看到,因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上,往往会用 rebase 和 squash 或 reset,不过我尝试了一下存在问题,会出现最后仍然剩两个

    2024年02月11日
    浏览(42)
  • 【Git】git push --mirror 迁移项目到其他代码仓库,且保留分支与提交记录。

    需要把云效代码仓库的某些项目,迁移到公司内部的代码仓库。且需要保留迁移项目的分支和提交记录。 百度各种方法,并不停本地测试,结合以往gitlab操作经验解决。 执行前需要,提前在其他代码仓库里新建好项目(New Project),得到Rename repository Path。 执行逻辑 1.根据远

    2024年02月12日
    浏览(53)
  • Git 如何将一个项目的代码放到一个新的仓库中,但不在新的仓库中显示旧的提交记录

    场景:我想把RuoYi的代码放到一个新的仓库里,放进去之后,这个仓库会显示RuoYi之前的所有提交,如何不显示这些旧的提交? 有时候,我们可能需要将一个项目的代码放到一个新的仓库中,但是我们又不想在新的仓库中显示旧的提交记录。这可能是因为旧的提交记录包含一

    2024年02月07日
    浏览(51)
  • Git 提交本地文件到指定的仓库

    1.下载安装  git  (已安装可忽略)     安装地址:Git - Downloads 2.在git里创建仓库  3.进入你需要上传的文件夹,空白处右击选择 Git Bash Here  4.进入终端后输入以下命令 ①初始化 : git init  (可以看到生成了 .git 目录)  ②添加远程仓库: git remote add origin + 仓库地址 然后执

    2024年02月08日
    浏览(38)
  • Git仓库实现:一次性提交多个文件

    首先是建立服务器与仓库的连接,不会操作的小伙伴可以看这一篇文章,链接: Git仓库 保姆级教程 选择文件夹,使用git clone上传的仓库,点击进去 输入命令行: git commit -m \\\" \\\" ,双引号一般填入描述或者版本信息,但是若要提交多个文件,则写入 \\\"add more files\\\" 有问题欢迎随时

    2024年02月12日
    浏览(69)
  • git删除远程仓库上已提交的文件/文件夹

    由于给本地项目配置远程库,误提交很多不应该提交的文件或文件夹,比如 .idea .settings .project .iml 以及日志等文件。以及由于 .gitignore 文件配置不正确很有可能导致某些不需要的目录上传到 git 远程仓库上了。除了注意配置 .gitignore 文件外,以下是解决办法。 提交了文件到自

    2024年02月11日
    浏览(97)
  • Jenkins 获取 Git 的提交记录(变更记录)通过机器人发送到企业微信群中

    如上,第一个就是文本,实测可以使用# 标题栏, 引用 其他的可以自己研究下. 下面这个是插件企业微信插件.  ##下面说明下. 缘起:通过企业微信插件已经能够实现较简单且有去的构建发布信息了. 但是过于简单的输出信息且插件不能直接自定义 ##需求:         在现有插件输出的

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包