Java 使用JGit获取存储库的所有标记
我想获得存储库中所有标记的列表,以及标记器和JGit的提交ID 首先,我尝试了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)
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()
。