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

问题描述 投票:7回答:2

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

如果我将特定提交的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;
}

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

sha1 jgit
2个回答
15
投票

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

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

3
投票

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

try (RevWalk revWalk = new RevWalk(repository)) {
    RevCommit commit = revWalk.parseCommit(commitId);
}
© www.soinside.com 2019 - 2024. All rights reserved.