为什么来自 Git.tagList().call() 的对象不是标签?
Why object from Git.tagList().call() is not a tag?
我正在尝试 Jgit,我想检索克隆存储库的所有标签,我想按日期对它们进行排序。这就是为什么我要尝试以下操作:
String path = "path/to/my/git/repo/.git";
Repository repository = builder.setGitDir(new File(path)).readEnvironment().findGitDir().build();
try (RevWalk walk = new RevWalk(repository)) {
List<Ref> taglist = new Git(repository).tagList().call();
Collections.sort(taglist, new Comparator<Ref>() {
public int compare(Ref o1, Ref o2) {
Date d1 = null;
Date d2 = null;
try {
d1 = walk.parseTag(o1.getObjectId()).getTaggerIdent().getWhen();
d2 = walk.parseTag(o2.getObjectId()).getTaggerIdent().getWhen();
} catch (IOException e) {
e.printStackTrace();
}
return d1.compareTo(d2);
}
});
}catch (GitAPIException e){
e.printStackTrace();
}
}
问题是 this.taglist = new Git(repository).tagList().call()
返回的一些 Ref 不是标签:实际上 parseTag()
引发了一个异常,它的消息是:
org.eclipse.jgit.errors.IncorrectObjectTypeException: Object 3ea2b388b5ef02622312fe08e6935a5f9c655e00 is not a tag.
谁能解释一下为什么会这样,我该如何解决这个问题?
谢谢大家
JGit 的 Git.tagList()
returns 一个 org.eclipse.jgit.api.ListTagCommand
.
ListTagCommand.call()
returns 输入 List<Ref>
as documented.
Ref
interface由ObjectIdRef
、ObjectIdRef.PeeledNonTag
、ObjectIdRef.PeeledTag
、ObjectIdRef.Unpeeled
和SymbolicRef
实现。
您应该在尝试对其进行任何操作之前检查返回值的类型,或者像您所做的那样使用 try/catch。
正如我在评论中所说,我解决了将 walk.parseTag(o1.getObjectId()).getTaggerIdent().getWhen();
更改为 walk.parseCommit(o1.getObjectId()).getAuthorIdent().getWhen();
的问题,对于 o2 也是如此。
希望这会对其他人有所帮助。
我正在尝试 Jgit,我想检索克隆存储库的所有标签,我想按日期对它们进行排序。这就是为什么我要尝试以下操作:
String path = "path/to/my/git/repo/.git";
Repository repository = builder.setGitDir(new File(path)).readEnvironment().findGitDir().build();
try (RevWalk walk = new RevWalk(repository)) {
List<Ref> taglist = new Git(repository).tagList().call();
Collections.sort(taglist, new Comparator<Ref>() {
public int compare(Ref o1, Ref o2) {
Date d1 = null;
Date d2 = null;
try {
d1 = walk.parseTag(o1.getObjectId()).getTaggerIdent().getWhen();
d2 = walk.parseTag(o2.getObjectId()).getTaggerIdent().getWhen();
} catch (IOException e) {
e.printStackTrace();
}
return d1.compareTo(d2);
}
});
}catch (GitAPIException e){
e.printStackTrace();
}
}
问题是 this.taglist = new Git(repository).tagList().call()
返回的一些 Ref 不是标签:实际上 parseTag()
引发了一个异常,它的消息是:
org.eclipse.jgit.errors.IncorrectObjectTypeException: Object 3ea2b388b5ef02622312fe08e6935a5f9c655e00 is not a tag.
谁能解释一下为什么会这样,我该如何解决这个问题?
谢谢大家
JGit 的 Git.tagList()
returns 一个 org.eclipse.jgit.api.ListTagCommand
.
ListTagCommand.call()
returns 输入 List<Ref>
as documented.
Ref
interface由ObjectIdRef
、ObjectIdRef.PeeledNonTag
、ObjectIdRef.PeeledTag
、ObjectIdRef.Unpeeled
和SymbolicRef
实现。
您应该在尝试对其进行任何操作之前检查返回值的类型,或者像您所做的那样使用 try/catch。
正如我在评论中所说,我解决了将 walk.parseTag(o1.getObjectId()).getTaggerIdent().getWhen();
更改为 walk.parseCommit(o1.getObjectId()).getAuthorIdent().getWhen();
的问题,对于 o2 也是如此。
希望这会对其他人有所帮助。