我正在使用 JGit 提取两个提交之间的差异,但我经常遇到 JGit 抛出 MissingObjectException
并说缺少未知提交 ID 的问题,如下所示:
org.eclipse.jgit.errors.MissingObjectException: Missing unknown 9eae334e9492f55a841e6eb7ab302ff11d03ab21
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:168)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:236)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:890)
at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:800)
at collect.CollectTestcase.autoExtraction(CollectTestcase.java:99)*
运行代码时经常出现这种情况
RevWalk walk = new RevWalk(repo);
walk.parseCommit(commitId)
有人知道它出了什么问题吗?
最佳答案
如果存储库中没有具有给定 ID 的对象,JGit 将抛出一个 MissingObjectException
。
git 中有不同类型的对象,常见的有提交、blob 和树。
RevWalk
提供 API 来搜索特定类型,例如 parseCommit
,以及使用 parseAny
的任何类型的对象。您正在搜索提交的信息在途中丢失,导致错误消息中出现令人困惑的“未知”。它实际上应该显示为“缺少提交 abc...”。
但是尽管有令人不快的消息,但这意味着没有这样的提交。您正在传递不同类型的对象的 ID,例如树对象,或者根本没有这样的对象。您可以使用 parseAny
查看是否存在具有给定 ID 的对象。如果可以找到一个对象,使用返回的 RevObject
的 getType
来找出它是哪种类型。
关于JGit 抛出 MissingObjectException 并说缺少未知的提交 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68097863/