首页 > 解决方案 > 如何在 JGit 中执行 git log --no-walk --tags

问题描述

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

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;
  }
}

标签: javajgit

解决方案


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

RefDatabase可以查询返回所有标签:

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

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

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

推荐阅读