我熟悉使用标记引用来获取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 {
...
}
答案 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
。