如何使用JGit从SHA1 ID字符串获取RevCommit或ObjectId?

mod*_*tos 8 sha1 jgit

这个问题与这个问题相反:JGit如何从RevCom中获取SHA1?.

如果我将特定提交的SHA1 ID作为字符串给出,我如何在JGit中获取ObjectId或关联RevCommit

这是一个可能的答案,它遍历所有RevCommits:

RevCommit findCommit(String SHAId)
{
    Iterable<RevCommit> commits = git_.log().call();    
    for (RevCommit commit: commits)
    {
        if (commit.getName().equals(SHAId))
            return commit;
    }    
    return null;
}
Run Code Online (Sandbox Code Playgroud)

有没有比上面这个实现更好的东西?

Rüd*_*ann 15

首先将字符串转换为a ObjectId然后RevWalk查找它可能更容易.

ObjectId commitId = ObjectId.fromString("ab434...");
try (RevWalk revWalk = new RevWalk(repository)) {
  RevCommit commit = revWalk.parseCommit(commitId);
}
Run Code Online (Sandbox Code Playgroud)

  • [jgit-cookbook](https://github.com/centic9/jgit-cookbook)有一个可立即运行的代码片段[这里](https://github.com/centic9/jgit-cookbook/blob /master/src/main/java/org/dstadler/jgit/api/GetRevCommitFromObjectId.java). (2认同)