我需要列出远程
Git存储库的标签并对其进行排序
创建日期通过JGit 3.2.0 api.
没有找到lsremote的方法,所以我只按名称排序:
System.out.println("Listing remote repository " + REMOTE_URL);
Collection<Ref> tags = Git.lsRemoteRepository()
.setTags(true)
.setRemote(REMOTE_URL)
.call();
ArrayList<Ref> taglist = new ArrayList<>(tags);
Collections.sort(taglist, new Comparator<Ref>()
{
public int compare(Ref o1, Ref o2) {
return o1.getName().compareTo(o2.getName());
}
});
for (Ref ref : taglist) {
System.out.println("Ref: " + ref.getName());
System.out.println("ObjectId : " + ref.getObjectId());
System.out.println("Ref short: " + Repository.shortenRefName(ref.getName()));
}
}
如何按创建日期对标签进行排序?
它适用于本地存储库,例如.克隆存储库后:
// open a cloned repository
FileRepositoryBuilder builder = new FileRepositoryBuilder();
Repository repository = builder.setGitDir(new File(localPath + "/.git"))
.readEnvironment()
.findGitDir()
.build();
final RevWalk walk = new RevWalk(repository);
List<Ref> call = new Git(repository).tagList().call();
RevTag rt;
Collections.sort(call, new Comparator<Ref>()
{
public int compare(Ref o1, Ref o2)
{
java.util.Date d1 = null;
java.util.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);
}
});
有没有其他方法,而不必首先克隆存储库?
最佳答案 不,不可能. ls-remote接口不会公开标签的创建时间.你将不得不克隆Git(或者至少获取它的所有标签,在大多数情况下,它几乎等同于克隆git).