2010-08-04 10 views
6

के साथ सबसे पुरानी प्रतिबद्धता प्राप्त करना मैं एक परियोजना के लिए जेजीआईटी के साथ प्रयोग कर रहा हूं और जब यह ज्यादातर काम करता है, तो सबसे पुरानी (पहली) प्रतिबद्धता को पुनर्प्राप्त नहीं करता है। यहां कोड है:जेजीआईटी

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 \t org.eclipse.jgit.lib.ObjectIdOwnerMap.get (ObjectIdOwnerMap.java:131) \t org.eclipse.jgit.revwalk.RevWalk पर पर। parseAny (RevWalk.java:857) \t org.eclipse.jgit.revwalk.RevWalk.parseCommit (RevWalk.java:772) '' ' – MariuszS