2010-08-04 3 views
6

프로젝트 용으로 JGit을 실험하고 있으며 대부분 작동하지만 가장 오래된 (첫 번째) 커밋을 검색하는 것은 그렇지 않습니다. 코드는 다음과 같습니다.JGit으로 가장 오래된 커밋을 가져옴

RevWalk rw = new RevWalk(new Repository(
      new File("/path/to/git"))); 
    RevCommit oldest; 
    Iterator<RevCommit> i = rw.iterator(); 
    if (i.hasNext()) 
     oldest = i.next(); 
    Commit c = oldest.asCommit(rw); //oldest is null here, NPE 

내가 잘못하고있는 것을 아는 사람이 있습니까?

답변

9

나는 그것을 발견했다고 생각한다. 리비전을 시작하려면 커밋 로그를 반대로하고 시작 지점을 설정해야합니다. 다음 추출물은 내가 찾고있는 것을 수행하지만, 나는 그것이 얼마나 최적인지를 어딘지 의심합니다.

RevWalk rw = new RevWalk(new Repository(
     new File("/path/to/git"))); 
RevCommit c = null; 
AnyObjectId headId; 
try { 
    headId = git.resolve(Constants.HEAD); 
    RevCommit root = rw.parseCommit(headId); 
    rw.sort(RevSort.REVERSE); 
    rw.markStart(root); 
    c = rw.next(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

내가 가진'''java.lang.NullPointerException이 org.eclipse.jgit.revwalk.RevWalk에서 org.eclipse.jgit.lib.ObjectIdOwnerMap.get (ObjectIdOwnerMap.java:131) \t에서 \t. parseAny (RevWalk.java:857) \t at org.eclipse.jgit.revwalk.RevWalk.parseCommit (RevWalk.java:772)''' – MariuszS

관련 문제