JGit列出远程标记并按创建日期排序

JGit列出远程标记并按创建日期排序,git,jgit,Git,Jgit,我需要列出一个远程Git存储库的标签,并根据它们进行排序 通过JGit 3.2.0 api创建日期 没有找到使用lsremote的方法,因此我只能按名称排序: System.out.println(“列出远程存储库”+远程URL); Collection tags=Git.lsRemoteRepository() .setTags(真) .setRemote(远程URL) .call(); ArrayList标记列表=新的ArrayList(标记); Collections.sort(标记列表,

我需要列出一个远程Git存储库的标签,并根据它们进行排序 通过JGit 3.2.0 api创建日期

没有找到使用lsremote的方法,因此我只能按名称排序:

System.out.println(“列出远程存储库”+远程URL);
Collection tags=Git.lsRemoteRepository()
.setTags(真)
.setRemote(远程URL)
.call();
ArrayList标记列表=新的ArrayList(标记);
Collections.sort(标记列表,新比较器()
{
公共整数比较(参考o1,参考o2){
返回o1.getName().compareTo(o2.getName());
}
});
用于(参考:标记列表){
System.out.println(“Ref:+Ref.getName());
System.out.println(“ObjectId:+ref.getObjectId());
System.out.println(“Ref short:+Repository.shortenRefName(Ref.getName()));
}
}
如何按创建日期对标签进行排序

它与本地存储库一起工作,例如克隆存储库后:

//打开克隆的存储库
FileRepositoryBuilder=新建FileRepositoryBuilder();
Repository Repository=builder.setGitDir(新文件(localPath+“/.git”))
.readEnvironment()
.findGitDir()
.build();
最终RevWalk=新RevWalk(存储库);
List call=new Git(repository.tagList().call();
重新标记rt;
Collections.sort(调用,newcomparator()
{
公共整数比较(参考o1,参考o2)
{
java.util.Date d1=null;
java.util.Date d2=null;
尝试
{
d1=walk.parseTag(o1.getObjectId()).getTaggerIdent().getWhen();
d2=walk.parseTag(o2.getObjectId()).getTaggerIdent().getWhen();
}捕获(IOE异常)
{
e、 printStackTrace();
}
返回d1。比较(d2);
}
});

有没有其他方法不必先克隆存储库?

没有,不可能。ls远程接口不公开标记的创建时间。您必须克隆Git(或者至少获取它的所有标记,在大多数情况下,这几乎等同于克隆Git)。

好的,那么我在克隆存储库之后的第二个片段就足够了?有可能以某种方式扩展lsremote接口吗?@Rebse:是的,您的第二个代码片段看起来很合理(但我真的不知道)。更改Git的ref播发协议是非常重要的,而且不太可能发生。除了JGit之外,还有其他用于Java的Git Api吗?@Rebse:我不知道。但需要明确的是,这并不是JGit中的限制,这是因为Git的wire协议中做出了(合理的)设计选择。