如何使用JGit API获取git标记的名称

时间:2015-03-06 11:16:46

标签: 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 {
    ...
}

1 个答案:

答案 0 :(得分:2)

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

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

NameRevCommand遵循更一般的方法。与git name-rev一样,它为给定的提交找到符号名称。

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

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

addPrefix确保标签优先于其他引用,以防多个引用指向object