JGit中的文件提交日期

时间:2014-11-13 19:53:41

标签: java git jgit

是否可以使用JGit解决首次提交某个文件的日期和时间?

Git等价物将列出第一个提交,如:

git log --format=%aD <FILE> | tail -1

1 个答案:

答案 0 :(得分:2)

可以按如下方式使用RevWalk来获取包含&#39; file.txt&#39;

的第一个提交
RevWalk revWalk = new RevWalk( repository );
revWalk.markStart( revWalk.parseCommit( repository.resolve( Constants.HEAD ) ) );
revWalk.setTreeFilter( PathFilter.create( "path/to/file.txt" ) );
revWalk.sort( RevSort.COMMIT_TIME_DESC );
revWalk.sort( RevSort.REVERSE, true );
RevCommit commit = revWalk.next();
...
revWalk.dispose();

在示例中,历史记录从HEAD开始。调整markStart()从其他地方调用开头或多次调用markStart()以包含多个起点。

PathFilter排除不包含给定存储库相对路径名的提交。最后,两个sort()调用会注意提交按时间戳(最新的第一个)按相反的顺序排序。因此,next()返回包含给定文件的最早提交。

请注意,传递给markStart()的提交必须来自同一版本的walker,即必须通过从同一revWalk实例调用parseCommit()来获取。有关详细信息,另请参阅this thread