2016-08-22 28 views
2

我試圖實現code這裏有兩個DIFF 2個Git修訂使用JGit,「IncorrectObjectTypeException:對象....是不是樹

try {                      
    ObjectId head = repo.resolve(tipCommit); //String with commit hash            
    ObjectId base = repo.resolve(baseCommit); //String with commit hash            
    log.info("Resolved HEAD as " + head.toString() + ", and base as " + base.toString()); 
    try {                     
     ObjectReader reader = repo.newObjectReader();          
     log.info(repo.getAllRefs());              
     log.info(base);                  
     CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();      
     oldTreeIter.reset(reader, base);             
     CanonicalTreeParser newTreeIter = new CanonicalTreeParser();      
     newTreeIter.reset(reader, head);             
     try {                    
      Git git = new Git(repo);              
      List<DiffEntry> diffs = git.diff()            
        .setNewTree(newTreeIter)            
        .setOldTree(oldTreeIter)            
        .call();                
      //List<File> changedFiles = filesFromDiffs(diffs, git);       
      git.close();                 
      log.info("Changed Files: \n" + changedFiles);         
      return changedFiles;               
     } catch (Exception e) {                
      log.error("Error while trying to diff commits: ", e);       
      //close git?                 
     }                     
     //Do we need to close the reader here?            
    } catch (Exception e) {                 
     log.error("Error setting up repository parsers: ", e);        
    }                       

這將導致下面的輸出:

Resolved HEAD as AnyObjectId[6c6b900d0a2d2783a2bdcde62cde0e04ac72aea0], and base as AnyObjectId[d97d892bba40f3676628625af0ae175deaffe9f8] 
[SymbolicRef[HEAD -> refs/heads/mainline=6c6b900d0a2d2783a2bdcde62cde0e04ac72aea0], Ref[refs/heads/mainline=6c6b900d0a2d2783a2bdcde62cde0e04ac72aea0], Ref[refs/remotes/matt-2016-08-19T20-43-26/mainline=6c6b900d0a2d2783a2bdcde62cde0e04ac72aea0], SymbolicRef[refs/remotes/origin/HEAD -> refs/remotes/origin/mainline=d97d892bba40f3676628625af0ae175deaffe9f8], Ref[refs/remotes/origin/mainline=d97d892bba40f3676628625af0ae175deaffe9f8]] 
AnyObjectId[d97d892bba40f3676628625af0ae175deaffe9f8] 
Error setting up repository parsers: 
org.eclipse.jgit.errors.IncorrectObjectTypeException: Object d97d892bba40f3676628625af0ae175deaffe9f8 is not a tree. 

至於我可以告訴大家,無論是我試圖比較提交都在回購,所以我不知道爲什麼底座提交不被認可。

回答

2

您正在試圖喂承諾id's(基地,頭)到樹解析器。但是,後者希望將樹ID傳遞給reset()

如果你仔細看看你提到的代碼,你會注意到樹ID已解決。