JGit:我可以在不检查的情况下找出某个特定标签是否存在于 Git 存储库中吗?

JGit: Can I find out whether or not a particular tag exists in a Git repository without checking it out?

我需要在 Java 中编写一段代码,用于测试特定标签是否存在于 Git 存储库中。

最明显的方法是:

git = Git.cloneRepository()
        .setURI(gitUri)
        .setDirectory(dir)
        .call();
git.checkout().setName(String.format("refs/tags/%s", version)).call();

如果标签version不存在,将抛出异常。

但是这种方式要求我有一个目录 (dir),存储库将被检出到其中。

是否可以在不检查磁盘的情况下找出远程存储库中是否存在标签?如果是,我该怎么做?

LsRemoteCommand 能够列出远程存储库的引用。

该命令可以配置为包括这样的标签:

LsRemoteCommand ls = Git.lsRemoteRepository();
Collection<Ref> remoteRefs = ls
    .setRemote("url-to-remote-repo")
    .setHeads(true) // true by default, set to false if not interested in refs/heads/*
    .setTags(true)  // include tags in result
    .call();

如果您希望将引用名称映射到 Ref 个对象,您可以使用 callAsMap().

执行命令