【问题标题】:Get all tags of a repository with JGit使用 JGit 获取存储库的所有标签
【发布时间】:2013-02-01 13:22:16
【问题描述】:

我想使用 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()? (什么是“剥离 ObjectId”?)

用JGit检索标签列表时,轻量级和带注释的标签有区别吗?

【问题讨论】:

    标签: java tags jgit


    【解决方案1】:

    getObjectId 在这里是正确的。对于带注释的标签,您想要获取带注释的标签对象的 ID,而不是标签最终指向的提交的 ID。另请参阅Javadoc of Ref

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

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

    【讨论】:

    • 不客气!顺便说一下,看看 EGit 在这种情况下如何使用 JGit API 可能会有所帮助,请参阅EGit contributor guide 了解设置说明。
    • 最后一个问题:我可以使用ListTagCommand 获得轻量级 标记的名称(对于RevTag,我可以使用revTag.getTagName()。)? (或者我应该创建自己的RevWalk 来获取所有标签?)
    • 您可以通过Ref#getName()获取名称,它将返回例如"refs/tags/my-tag"。要获取“短名称”,请使用Repository.shortenRefName()
    猜你喜欢
    • 2015-07-05
    • 2015-07-18
    • 2016-07-01
    • 2016-01-22
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多