当前位置: 首页 > 知识库问答 >
问题:

获取jGit中特定SHA-1的提交

松灿
2023-03-14

我有一个新克隆的存储库的SHA-1。我要这个SHA-1的作者缩进。

所以我需要使用RevWalk并迭代整个存储库?或者是否有 findXX 方法或其他代码可用于获取 RevCommit 或其他具有 PersonIdent 的对象?

我尝试了什么:

public void authorInfoOf(Repository repo, AnyObjectId head) {
    try {
        try (RevWalk walk = new RevWalk(repo)) {
            ObjectDatabase db = repo.getObjectDatabase();
            ObjectLoader k = repo.newObjectReader().open(head);
            ObjectReader s;
            // repo.newObjectReader().open(head);
            ObjectStream st = k.openStream();
            // RevWalk rw2 = new RevWalk(k);
            RevCommit commit = null;// walk.parseCommit(ref.getObjectId());

            PersonIdent authorIndent = commit.getAuthorIdent();
            System.out.println("\nCommit-Message: " + commit.getFullMessage() + " " + authorIndent.getEmailAddress());
        }
    } catch (Exception e) {
        System.out.println("Authir info of Anybject id Err " + e);
        e.printStackTrace();
    }
}

共有2个答案

曾新立
2023-03-14

这对我有用:

public RevCommit getCommit(String idString, Repository repository, Git git){
    try{

        ObjectId o1 = repository.resolve(idString);
        if(o1 != null){
            try( RevWalk walk = new RevWalk( repository ) ) {
                  RevCommit commit = walk.parseCommit( o1 );
                  PersonIdent ai = commit.getAuthorIdent();
                  System.out.println("bbb >>" + ai.getEmailAddress() + "|" + ai.getTimeZone()  + "|" + ai.getWhen() + ", ref :" + idString);
                  return commit;
                }
        }else{
            System.err.println("Could not get commit with SHA :" + idString);
        }
    }catch (Exception e) {
        System.out.println("err :" + e);
        e.printStackTrace();
    }
    return null;
}
谯嘉胜
2023-03-14

RevCommit 表示 Git 存储库中的特定提交。使用 RevWalk::p arseCommit() 获取特定对象 id/SHA-1 的 RevCommit

例如:

try( RevWalk walk = new RevWalk( repository ) ) {
  RevCommit commit = walk.parseCommit( ref.getObjectId() );
}

parseCommit返回给定ObjectId的匹配提交对象。

为了将SHA-1(string)转换为ObjectId,请使用ObjectId::fromString()

ObjectId commitId = ObjectId.fromString( "ab434..." );

另请参阅:如何使用JGit从SHA1 ID字符串获取RevCommit或ObjectId?

在上面的示例中,Ref 用于引用对象 id。Refs 表示对对象 ID(如分支、标记)或特殊引用(如 HEAD)的命名引用。Repository::exactRef() 可用于将字符串解析为 Ref 对象。

例如:

Ref headRef = repository.exactRef( "HEAD" );
 类似资料:
  • 如何使用jgit遍历来自特定分支的特定提交的所有内容? 这段代码从提交中检索一个特殊文件,但我希望遍历提交的所有内容。

  • 问题内容: 我想使用JGit获取存储库中的最后提交元数据(按日​​期最小的提交)。 我知道我可以使用以下方式获取提交元数据 但是如何获取最新的提交哈希? 还有其他方法可以直接在存储库中按日期获取最小数据吗? 问题答案: 按所有分支中的最后提交日期进行比较。 可以更改为仅比较远程分支。或者… 可以省略流利的setter 以便从本地存储库读取。

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

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

  • 问题内容: 这是一个简单的问题,但请说我有一个MxN矩阵。我要做的就是提取特定的列并将其存储在另一个numpy数组中,但是我得到了无效的语法错误。这是代码: 似乎上述行就足够了,但我想不是。我环顾四周,但找不到关于此特定场景的任何语法明智的方法。 问题答案: 我假设你想要的列和? 要一次选择多个列,请使用 要一次选择一个,请使用 带有名称: 您可以从…获得名字。

  • 我想获取作为提交一部分的所有文件的列表。我有可用的提交ID。 我查看了以下链接 如何使用JGit获取提交的文件列表 并尝试了下面的代码。 和以下代码 使用上面的代码,我得到了分支中存在的所有文件的列表。我需要在提交中删除,修改或添加的文件列表。 使用以下git命令,我成功获得了属于特定提交的文件列表 我想从JGit那里得到同样的东西。 更新:我不想得到两个提交之间的区别,而只是作为提交的一部分更改