当前位置: 首页 > 面试题库 >

使用JGit在存储库中获取最新提交

商燕七
2023-03-14
问题内容

我想使用JGit获取存储库中的最后提交元数据(按日​​期最小的提交)。

我知道我可以使用以下方式获取提交元数据

try (RevWalk walk = new RevWalk(repository)) {
    RevCommit commit = walk.parseCommit(repository.resolve(commitHash));
}

但是如何获取最新的提交哈希?

还有其他方法可以RevCommit直接在存储库中按日期获取最小数据吗?


问题答案:

按所有分支中的最后提交日期进行比较。 ListMode.ALL可以更改为ListMode.REMOTE仅比较远程分支。或者…
.setListMode(whatever)可以省略流利的setter 以便从本地存储库读取。

RevCommit youngestCommit = null;
Git git = new Git(repository);
List<Ref> branches = git.branchList().setListMode(ListMode.ALL).call();
try {
    RevWalk walk = new RevWalk(git.getRepository());
    for(Ref branch : branches) {
        RevCommit commit = walk.parseCommit(branch.getObjectId());
        if(youngestCommit == null || commit.getAuthorIdent().getWhen().compareTo(
           youngestCommit.getAuthorIdent().getWhen()) > 0)
           youngestCommit = commit;
    }
} catch (...)


 类似资料:
  • 问题内容: 我不知道自己在做什么错,但是如果不先从系统中完全删除旧容器,就无法从注册表中使用最新映像。即使docker- compose pull已获取较新的映像,它似乎仍在使用先前启动的映像。 我研究了如何使docker-compose始终从新映像重新创建容器?这似乎与我的问题类似,但是那里提供的解决方案都不适合我,因为我正在寻找可以在生产服务器上使用的解决方案,因此我不想在启动它们之前先删除所

  • 我有一个新克隆的存储库的SHA-1。我要这个SHA-1的作者缩进。 所以我需要使用RevWalk并迭代整个存储库?或者是否有 方法或其他代码可用于获取 或其他具有 PersonIdent 的对象? 我尝试了什么:

  • 我正在尝试从profile repository中获取first name和last name等属性,并使用Droplet将其显示在jsp中。下面是我的示例代码:sampledroplet.java SampleDroplet.Properties sampledroplet.jsp 我试着在jsp中显示profileId,它起作用了。但当我将它传递给droplet时,它显示NullPointer

  • 问题内容: 我一直在研究将要集成Git功能的基于Java的产品。使用Git的功能之一,我通过分阶段执行将10多个文件添加到Git存储库中,然后在一次提交中提交了这些文件。 以上过程可能相反吗?即查找作为提交的一部分提交的文件列表。 我在命令的帮助下获得了提交,但是我不确定如何获取提交的文件列表。 示例代码: 问题答案: 每个提交都指向一 棵树 ,该 树 表示构成该提交的所有文件。注意,这不仅包括使

  • 我一直在开发一个基于Java的产品,Git特性将被集成到该产品中。通过使用Git的一个特性,我将10个文件添加到Git存储库中,然后在一次提交中提交。 上述过程是否可能相反?即查找作为提交的一部分提交的文件列表。 我在< code>git.log()命令的帮助下获得了提交,但是我不确定如何获得提交的文件列表。 示例代码:

  • 我正在使用JGit访问远程Git回购,我需要为此使用SSH。JGit使用JSch提供安全访问。但是,我不确定如何设置JGit的密钥文件和知道主机文件。我所尝试的如下。 创建SshSessionFactory的自定义配置,通过子类化JSchConfigSessionFactory使用: 在我访问远程Git回购的类中,执行了以下操作: 我不知道如何将这个JSch对象与JGit关联,以便它能够成功地连接