Как получить RevCommit или ObjectId из строки идентификатора SHA1 с JGit?

этот вопрос является обратным этому вопросу:JGit как мне получить SHA1 от RevCommit?.

если мне задан идентификатор SHA1 конкретного коммита в виде строки, как я могу получить ObjectId или связанные RevCommit в JGit?

вот возможный ответ, который повторяется через все RevCommits:

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

есть ли что-нибудь лучше, чем эта реализация выше?

2 ответов


вероятно, проще сначала преобразовать строку в ObjectId и затем RevWalk посмотреть его.

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

обратите внимание, что RevWalk теперь автоматически закрывается, поэтому вы также можете использовать оператор try-with-resources:

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