git - JGit 列出远程标签并按创建日期排序

标签 git jgit

我需要列出远程 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 接口(interface)不公开标签的创建时间。您必须克隆 Git(或至少获取其所有标签,在大多数情况下,这几乎等同于克隆 git)。

关于git - JGit 列出远程标签并按创建日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389899/

相关文章:

git - 为什么 gitk 没有显示我的本地分支?

使用 svn.pushmergeinfo 进行 merge 的 git-svn 工作流程

java - jgit - 基于文件扩展名的 git diff

android - 无法将JGit导入gradle构建脚本

git - 如何将 git 子模块作为普通目录添加到 git repo 中?

git - 当解决方案是删除冲突文件时,有没有办法让 git rerere 工作?

git - "go get"私有(private)存储库的正确方法是什么?

eclipse-plugin - 如何通过EGit/JGit插件为Git事件创建监听器?

eclipse - 用egit创建分支时pull strategy是什么意思?

java - 使用 jgit 递归检查 Git 工作副本中的更改的最快方法是什么?