2014-09-10 32 views
7

To pytanie jest przeciwieństwem tego pytania: JGit how do i get the SHA1 from a RevCommit?.Jak uzyskać RevCommit lub ObjectId z ciągu SHA1 ID z JGit?

Jeśli otrzymam identyfikator SHA1 konkretnego zatwierdzenia w postaci ciągu znaków, w jaki sposób mogę uzyskać ObjectId lub powiązany RevCommit w JGit?

Oto możliwe odpowiedzi, który dokonuje iteracji za pośrednictwem wszystkich 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; 
} 

Czy jest coś lepszego niż to realizacji powyżej?

Odpowiedz

10

Najprawdopodobniej łatwiej jest najpierw przekonwertować ciąg znaków na ObjectId, a następnie odszukać go na RevWalk.

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

Sieć [jgit-książka kucharska] (https://github.com/ centic9/jgit-cookbook) ma gotowy do uruchomienia fragment tego [tutaj] (https://github.com/centic9/jgit-cookbook/blob/master/src/main/java/org/dstadler/jgit/ api/GetRevCommitFromObjectId.java). – centic

1

Uwaga, RevWalk jest teraz automatycznie zamykane, więc można również użyć try-with-zasobów oświadczenie:

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