如何使用 JGit 列出当前分支中的所有标签?
我可以轻松列出所有标签
List<Ref> call = jGit.tagList().call();
for (Ref ref : call) {
System.out.println("Tag: " + ref);
}
Run Code Online (Sandbox Code Playgroud)
但是如何只列出当前分支中的那些?
要列出给定分支的所有标签,您需要从分支的头部提交开始,逐个提交遍历历史提交。对于历史记录中的每个提交,您需要找到指向该提交的所有标签。
例如:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出将是这样的
tag mytag -> commit 92a85dcb2326caf08f4ad1ddb6132f92ee0b3e7c 1438794838 ----sp
Run Code Online (Sandbox Code Playgroud)
其中提交是taggsd之一。
在LogCommand返回一个迭代器,与头部开始提交当前的分支。NameRecCommand循环中的调用查找指向给定提交的所有标签。
优化的变体可以使用ListTagCommand来一次检索所有标签的列表,然后用在标签列表中git.nameRev查找当前提交的代码替换代码。
| 归档时间: |
|
| 查看次数: |
2064 次 |
| 最近记录: |