Java 如何在jGit中使用过滤器?

Java 如何在jGit中使用过滤器?,java,jgit,Java,Jgit,如何在jGit中使用RevFilters 我找到了一个关于完成特定任务()的问题的答案,答案是使用RevFilter的特定子类。但是,我不知道如何使用RevFilters 特别是,我想知道我需要做些什么来回答我所链接的问题,它说 并使用它在两个日期之间实际迭代提交。比如: RevFilter between = CommitTimeRevFilter.between(since, until); RevWalk walk = new RevWalk(repository); walk.magic

如何在jGit中使用
RevFilter
s

我找到了一个关于完成特定任务()的问题的答案,答案是使用
RevFilter
的特定子类。但是,我不知道如何使用
RevFilter
s

特别是,我想知道我需要做些什么来回答我所链接的问题,它说

并使用它在两个日期之间实际迭代提交。比如:

RevFilter between = CommitTimeRevFilter.between(since, until);
RevWalk walk = new RevWalk(repository);
walk.magicallyApplyFilters(between);
for(RevCommit commit : RevWalk) {
    // Do my thing
}
我已经阅读了jGit文档。不幸的是,有这样一句话:

TODO谈论过滤器


所以文档对我没有帮助。虽然我得到的印象是使用过滤器是使用jGit的一个基本部分,但还没有人问过如何在StackOverflow上使用过滤器

根据源代码判断,您只需创建
RevWalk
迭代器的实例,设置过滤器,然后在walker上迭代

RevWalk walk = new RevWalk(repo);
walk.markStart(walk.parseCommit(repo.resolve(Constants.HEAD)));
walk.sort(RevSort.REVERSE); // chronological order
final LocalDate thisYear = new LocalDate(2015, 1, 1); // joda
walk.setRevFilter(CommitTimeRevFilter.after(thisYear.toDate()));
for(RevCommit commit : walk) {
    // do your thing
}

过滤器本质上只是一个谓词,用于判断是否从walker生成了提交。您可以在
org.eclipse.jgit.revwalk.filter
包中找到许多过滤器。或者,您可以通过扩展
RevFilter
类来创建自己的类。

我在使用您的答案时遇到问题。看,我现在正在尝试。但到目前为止,我的印象是它经过的时间与你设定的时间并不完全相同。好像有一个很大的偏移量。在我的测试中,我所看到的回购协议自2014年初以来已经有了修订。试图为2015年的修订设置一个过滤器正在产生截至2014年12月15日至今的承诺。似乎有点不对劲。哦,我解决了我的问题,我把自己和作者提交时间和修订提交时间搞混了。修订提交时间出现在正确的时间,我只是在将时间转换为人类可读的日期时遇到问题。
RevWalk walk = new RevWalk(repo);
walk.markStart(walk.parseCommit(repo.resolve(Constants.HEAD)));
walk.sort(RevSort.REVERSE); // chronological order
final LocalDate thisYear = new LocalDate(2015, 1, 1); // joda
walk.setRevFilter(CommitTimeRevFilter.after(thisYear.toDate()));
for(RevCommit commit : walk) {
    // do your thing
}