我正在尝试实现 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/