如何在 JGit 中执行 git log --no-walk --tags

How to do git log --no-walk --tags in JGit

我想使用 JGit 中的 LogCommand 来执行上述命令。如何编写可以完成这项工作的自定义过滤器?我做了类似的事情:

RevFilter revFilter = new RevFilter() {
  @Override
  public boolean include(RevWalk revWalk, RevCommit revCommit) throws StopWalkException, MissingObjectException, IncorrectObjectTypeException, IOException {
    if (revCommit.getParentCount() > 0) { // do not traverse parent(s) }
    return false;
  }

  @Override
  public RevFilter clone() {
    return this;
  }
}

要获取存储库中所有标签的 HEAD 提交,您可以使用 JGit return 所有标签,然后解析每个标签的提交。

RefDatabase可以查询到return所有标签:

Map<String, Ref> allTags repository.getRefDatabase().getRefs("refs/tags/");

然后使用RevWalk解析每个标签ref:

for (Ref tagRef : allTags.values()) {
  try (RevWalk walk = new RevWalk(repository)) {
    RevCommit commit = walk.parseCommit(tagRef.getObjectId();
    // ...
  }
}