java - JGit 中的文件提交日期

标签 java git jgit

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

Git 等效项将列出第一个提交,例如:

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

最佳答案

可以按如下方式使用 RevWalk 来获取包含“file.txt”的第一个提交

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() 的提交必须来自同一个修订遍历器,即必须通过从同一个修订遍历器调用 parseCommit() 来获取它revWalk 实例。另请参阅this thread了解更多详情。

关于java - JGit 中的文件提交日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26917239/

相关文章:

java - 使用手动 PK(不是自动生成的)使用 Spring 数据 JDBC CrudRepository 插入 oracle

java - 更新 JFreeChart 时保留用户缩放状态

java - 具有多个模块的 Maven 项目无法找到模块的 pom.xml - Jenkins/Eclipse

git - 不 promise 掌握的原因

git - Teamcity 到 github 列表远程引用失败未授权 jgit

java - 实现接口(interface)

git rebase -i : I only want the last commit

maven - mvn jgitflow :release-finish is merging release --> master --> develop

java - 从 Java 程序操作 GIT 版本控制系统的输出

git - "git <refspec> does not look like a ref"尝试将本地分支链接到远程 Heroku 应用程序