java - 使用 JGit,“In CorrectObjectTypeException : Object . ...不是一棵树

标签 java git jgit

我正在尝试实现 code这里有两个 diff 两个 git 提交。

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.  

据我所知,我尝试比较的两个提交都在存储库中。所以我不知道为什么基本提交不被识别。

最佳答案

您正在尝试将提交 ID(基数、头)提供给树解析器。然而,后者期望将树 ID 传递给 reset()

如果您仔细查看您提到的代码,您会注意到树 ID 已解析。

关于java - 使用 JGit,“In CorrectObjectTypeException : Object . ...不是一棵树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39083851/

相关文章:

java - 如何在不使用 getter 的情况下访问派生类静态成员?

java - Spring 和 Hibernate Web 应用程序 : how to resolve 'org. hibernate.LazyInitializationException?

java - 通过 YML 文件将 map 中的符号和特殊字符作为键

ios - 如何组织Android NDK/iOS项目

git - --假设同步时未更改的文件会发生什么?

git - jgit 我怎样才能得到两个日期之间发生的所有提交

java - Ant 构建不包含 Android 支持库 jar

git - 使用 GIT 维护应用程序的不同变体

java - Git 在 JGit 中的目标分支中显示文件?

maven - mvn jgitflow :release-finish is merging release --> master --> develop