有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajgit:使用between过滤Revwalk,并获取结果的TreeWalk

我基本上想按月份过滤我的TreeWalk。以下是我使用的代码:

head = repository.getRef("HEAD");
walk = new RevWalk(repository);

Date since= new Date();
since.setMonth(02);
since.setYear(2014-1900);
since.setDate(01);

Date until= new Date();
until.setMonth(02);
until.setYear(2014-1900);
until.setDate(31);

RevFilter between = CommitTimeRevFilter.between(since,until);
walk.setRevFilter(between);

commit = walk.parseCommit(head.getObjectId());
tree = commit.getTree();

TreeWalk treeWalk = new TreeWalk(repository);
treeWalk.addTree(tree);
treeWalk.setRecursive(true);
TreeFilter treefilter= walk.getTreeFilter();
treeWalk.setFilter();
return treeWalk;

我先过滤RevWalk,然后获取一个TreeWalk,因为我最终需要一个月的TreeWalk来获取我的详细信息

问题是,即使在过滤之后,我也得到了头部(最后一次提交)。我相信问题是

commit = walk.parseCommit(head.getObjectId());

但我不知道如何修复它,以获得一个月的过滤树路


共 (1) 个答案

  1. # 1 楼答案

    试试下面的代码(我在这篇文章中得到了解决这个问题的灵感:https://stackoverflow.com/a/27993763/4997684):

    final RevWalk walk = new RevWalk(repository);
    
    Date since= new Date();
    since.setMonth(02);
    since.setYear(2014-1900);
    since.setDate(01);
    
    Date until= new Date();
    until.setMonth(02);
    until.setYear(2014-1900);
    until.setDate(31);
    
    RevFilter between = CommitTimeRevFilter.between(since, until);
    
    walk.markStart(walk.parseCommit(repository.resolve(Constants.HEAD)));
    walk.sort(RevSort.REVERSE);
    walk.setRevFilter(between);
    
    for(RevCommit revCommit : walk) {
        System.out.println(new Date((long) revCommit.getCommitTime()*1000L));
    }