java - 如何使用 JGit API 获取 git 标签的名称

标签 java jgit

我熟悉使用标签引用来获取 Ref,然后开始做某事:

Ref ref = repository.getRef("refs/tags/jena-2.11.2");

但是,如果将 ref 传递给我,并且我想取回“refs/tags/jena-2.11.2”字符串,我该如何使用 JGit API 来实现呢?

RevWalk walk = new RevWalk(repository);
RevObject object;
try {
    object = walk.parseAny(ref.getObjectId());
} catch (MissingObjectException e) {
     .....
} catch (IOException e) {
     .....
}

if (object instanceof RevTag) {
    // String tagName = object.what?????????
} else if (object instanceof RevCommit) {
    ...
} else {
    ...
}

最佳答案

提交不知道可能指向它的标签。因此,没有 object.getRefs() 或类似的东西。

如果您知道应该有一个标记指向给定的提交,则可以使用 ListTagCommand 获取所有标记的列表,然后迭代此列表,直到找到指向的标记到此提交。

NameRevCommand 遵循更通用的方法。与 git name-rev 类似,它查找给定提交的符号名称。

按照您的示例,此代码段将打印提交的标签名称:

Map<ObjectId,String> names = git.nameRev().add( object ).addPrefix( "refs/tags/" ).call();
System.out( names.get( object ) );

如果多个引用指向objectaddPrefix 可确保标签优先于其他引用。

关于java - 如何使用 JGit API 获取 git 标签的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897658/

相关文章:

java - 具有 2 种不同类型的对象数据

java - 同步客户端-服务器游戏状态

java - 在 setter 方法中做其他事情是否被认为有副作用?

java - Jgit 错误?即使使用 UsernamePasswordCredentialsProvider 传递了错误的用户名,Git 克隆命令也能正常工作

git - Jenkins 发布问题与 jgit

eclipse : "re-indexing repository workspace"或 "Computing Git status for repository workspace"

java - 找出 JOOQ 函数依赖哪些表

java - 在 Java 中重载

java - 如何在 jgit 中调用 git show --first-parent?

java - 从 Java 程序操作 GIT 版本控制系统的输出