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

Son*_*123 4 java tags jgit

我想获得一个存储库的所有标签列表以及tagger和带有JGit的commit-IDs.

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

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

RevWalk walk = new RevWalk(repository);
RevTag tag = walk.parseTag(objectIdOfTag);
Run Code Online (Sandbox Code Playgroud)

这适用于我的存储库,但我不确定这是否正确:呼叫是正确Ref.getObjectId()还是应该呼叫Ref.getPeeledObjectId()?(什么是" 去皮的 ObjectId"?)

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

rob*_*nst 6

getObjectId这是正确的.对于带注释的标记,您需要获取带注释的标记对象的ID,而不是标记最终指向的提交的ID.另见参考文献Javadoc.

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

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