当我使用RevFilter时,我的RevWalk没有选择任何提交

我正在使用jGit遍历存储库中的提交。 当我RevWalk使用RevWalk类时,我会收回存储库中的所有提交。 但是,当我使用revWalk.setFilter()添加filter时,我不再获得任何提交,即使我确定存在符合我的filter条件的提交。

这是我的代码:

  RevWalk walk = new RevWalk(repo); // These two lines give me trouble: // RevFilter filter = CommitTimeRevFilter.between(sinceDate, untilDate); // walk.setRevFilter(filter); Ref head = repo.getRef("refs/heads/master"); RevCommit headCommit = walk.parseCommit(head.getObjectId()); // omitting some exception handling for conciseness walk.markStart(headCommit); List commits = new LinkedList(); for(RevCommit commit : walk) { MyCommitPOCO processedCommit = processRevCommit(commit); commits.add(processedCommit); } walk.dispose(); return commits; 

当我运行此代码而没有在顶部注释掉的两行时,for循环的for循环提交会处理我的存储库中的每个提交,这是我所期望的。 但是,当我使用RevFilter取消注释RevFilter ,for循环不会迭代甚至单个提交,这对我来说似乎不对。 我已经尝试使用多个值运行程序,因为我知道适用于我正在尝试使用的存储库的sinceDateuntilDate ,但我所做的尝试都没有奏效。

当我使用RevFilter时,为什么我的RevWalk我迭代任何提交? 当我取消注释时导致问题的两行代码出了什么问题?

我发现CommitTimeRevFilter按预期工作。 您是否已调试代码以查看所需的提交是否到达filter代码?

以下是可作为起点的测试。 它执行四次提交,时间戳为1,2,3,4秒,然后使用带有时间filter的RevWalk来收集第二个和第二个之间的时间戳:

 public class RevWalkFilterLearningTest { @Rule public final TemporaryFolder tempFolder = new TemporaryFolder(); private Git git; @Test public void testTimeFilter() throws Exception { commit( 1000 ); commit( 2000 ); commit( 3000 ); commit( 4000 ); RevWalk revWalk = new RevWalk( git.getRepository() ); RevFilter filter = CommitTimeRevFilter.between( new Date( 2000 ), new Date( 3000 ) ); revWalk.setRevFilter( filter ); Ref headRef = git.getRepository().getRef( Constants.HEAD ); RevCommit headCommit = revWalk.parseCommit( headRef.getObjectId() ); revWalk.markStart( headCommit ); int count = 0; for( RevCommit revCommit : revWalk ) { count++; } assertEquals( 2, count ); } private void commit( int time ) throws Exception { PersonIdent committer = new PersonIdent( "committer", "committer@example.com" ); git.commit().setCommitter( new PersonIdent( committer, new Date( time ) ) ).setMessage( "msg" ).call(); } @Before public void setUp() throws GitAPIException { git = Git.init().setDirectory( tempFolder.getRoot() ).call(); } @After public void tearDown() { git.close(); } }