JGit:检索与git commit关联的标签

问题描述 投票:8回答:3

我想使用JGit API检索与特定提交哈希(如果有)关联的标签?

请提供相同的代码段。

jgit
3个回答
10
投票

Git object model将标记描述为包含有关特定对象信息的对象。提交(除其他事项外),因此在纯git中不可能获得您想要的信息(提交对象没有有关相关标签的信息)。这应该“向后”完成,获取标签对象,然后引用特定的提交。

因此,如果要获取有关为特定提交指定的标签的信息,则应遍历它们(标签)并选择适当的。

List<RevTag> list = git.tagList().call();
ObjectId commitId = ObjectId.fromString("hash");
Collection<ObjectId> commits = new LinkedList<ObjectId>();
for (RevTag tag : list) {
    RevObject object = tag.getObject();
    if (object.getId().equals(commitId)) {;
        commits.add(object.getId());
    }
}

4
投票

[如果您知道提交时恰好有一个标记,则可以在最新版本的JGit(describe)中使用~ November 2013

Git.wrap(repository).describe().setTarget(ObjectId.fromString("hash")).call()

您可以解析结果,以查看是否存在标签,但是如果可以有多个标签,则应使用Marcins解决方案。


0
投票

在最新版本(3.7.1)中,git.tagList().call();返回List<Ref>而不是List<RevTag>,因此该方法不能再使用,是否有其他解决方法?

© www.soinside.com 2019 - 2024. All rights reserved.