Java 使用JGit获取存储库的所有标记

Java 使用JGit获取存储库的所有标记,java,tags,jgit,Java,Tags,Jgit,我想获得存储库中所有标记的列表,以及标记器和JGit的提交ID 首先,我尝试了Git.tagList().call()命令并解析标记: objectIdOfTag = oneResultOfTheTagList.getObjectId(); // or should I call getPeeledObjectId() here? RevWalk walk = new RevWalk(repository); RevTag tag = walk.parseTag(objectIdOfTag)

我想获得存储库中所有标记的列表,以及标记器和JGit的提交ID

首先,我尝试了
Git.tagList().call()
命令并解析标记:

objectIdOfTag = oneResultOfTheTagList.getObjectId(); 
// or should I call getPeeledObjectId() here?

RevWalk walk = new RevWalk(repository);
RevTag tag = walk.parseTag(objectIdOfTag);
这适用于我的存储库,但我不确定这是否是正确的方法:调用
Ref.getObjectId()
是否正确,还是应该调用
Ref.getPeeledObjectId()
?(什么是“剥离对象”?)


使用JGit检索标记列表时,轻量级标记和带注释的标记之间是否存在差异?

getObjectId
在这里是正确的。对于带注释的标记,您希望获取带注释标记对象的ID,而不是标记最终指向的提交对象的ID。另见

要解析标记,您必须同时处理轻量级和带注释的情况:

RevObject object = walk.parseAny(objectIdOfTag);
if (object instanceof RevTag) {
    // annotated
} else if (object instanceof RevCommit) {
    // lightweight
} else {
    // invalid
}

不客气!顺便说一句,了解EGit在这种情况下如何使用JGit API可能会有所帮助,有关安装说明,请参阅。最后一个问题:我可以使用
ListTagCommand
(对于
RevTag
,我可以使用
RevTag.getTagName()
)获取轻量级标记的名称吗?(或者我应该创建自己的
RevWalk
来获取所有标记吗?)您可以通过
Ref#getName()
获取名称,它将返回例如
“refs/tags/my tag”
。要获取“短名称”,请使用
Repository.shortenRefName()