gpt4 book ai didi

java - 使用 JGit 列出当前分支中的所有标签

转载 作者:太空狗 更新时间:2023-10-29 14:37:40 27 4
gpt4 key购买 nike

JGit如何列出当前分支的所有标签?
我可以轻松列出所有标签

List<Ref> call = jGit.tagList().call();
for (Ref ref : call) {
System.out.println("Tag: " + ref);
}

但是如何只列出当前分支中的那些呢?

最佳答案

要列出给定分支的所有标签,您需要逐个提交地遍历历史提交,从分支的头提交开始。对于历史记录中的每个提交,您需要找到指向该提交的所有标记。

例如:

git.commit().setMessage("tagged").call();
git.tag().setName("mytag").call();
git.commit().setMessage("untagged").call();

Iterable<RevCommit> commits = git.log().call();
for (RevCommit commit : commits) {
Map<ObjectId, String> namedCommits = git.nameRev().addPrefix("refs/tags/").add(commit).call();
if (namedCommits.containsKey(commit.getId())) {
System.out.println("tag " + namedCommits.get(commit.getId()) + " -> " + commit);
}
}

输出是这样的

tag mytag -> commit 92a85dcb2326caf08f4ad1ddb6132f92ee0b3e7c 1438794838 ----sp

提交是 taggsd 一个。

LogCommand 返回一个以当前分支的头部提交开始的迭代器。在循环中调用的 NameRecCommand 查找指向给定提交的所有标记。

优化的变体可以使用 ListTagCommand 一次检索所有标签的列表,然后将 git.nameRev 代码替换为在标签列表。

关于java - 使用 JGit 列出当前分支中的所有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com