java - 如何在 JGit 中执行 git log --no-walk --tags
问题描述
我想使用LogCommand
JGit 来执行上述命令。如何编写可以完成这项工作的自定义过滤器?我做了类似的事情:
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 返回所有标签,然后解析每个标签的提交。
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();
// ...
}
}
推荐阅读
- wordpress - JQuery Mobile 为每个页面添加 WordPress 页面内容
- python - 覆盖属性
- c++ - C++ 是否用函数调用替换内置运算符?
- r - Azure Functions 中的 RDotNet (R.NET) 问题
- php - PHP-比较foreach循环中的相似度得分
- github - Google Cloud Functions:Github 发布的项目布局
- javascript - 如何在 Google 表格中合并行
- ios - 为什么在重新启动应用程序或执行两次 NSBatchDeleteRequest 之前不会删除条目?
- javascript - 我可以使用节点/套接字广播particle.js 背景和交互吗?
- sql - SQL Server:多个 WHERE NOT EXISTS 子句