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

时间:2014-09-10 00:18:55

标签: sha1 jgit

这个问题与此问题相反:JGit how do i get the SHA1 from a RevCommit?

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

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

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

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:3)

请注意,RevWalk现在可以自动关闭,因此您也可以使用try-with-resources语句:

try (RevWalk revWalk = new RevWalk(repository)) {
    RevCommit commit = revWalk.parseCommit(commitId);
}