jGit 针对单个文件比较这个文件最新的 commit

本贴最后更新于 1287 天前,其中的信息可能已经事过景迁

1. jGit 针对单个文件比较这个文件最新的 commit

path 为文件路径

private static List<DiffEntry> diff(String path) throws GitAPIException, IOException { try (Repository repository = RepositoryUtil.getRepository()) { try (Git git = new Git(repository)) { Iterable<RevCommit> commits = git.log() .addPath(path) .call(); RevCommit latestCommit = StreamSupport.stream(commits.spliterator(), false) .reduce((c1, c2) -> c1.getCommitTime() > c2.getCommitTime() ? c1 : c2) .orElseThrow(NullPointerException::new); AbstractTreeIterator oldTreeParser = TreeParserUtil.parser(repository, latestCommit.name()); return git.diff() .setOldTree(oldTreeParser) .setPathFilter(PathFilter.create(path)) .call(); } } }

2. 如果你想对 git diff 的结果进行输出

有两种办法:

2.1 对结果 DiffEntry 进行输出

public static void printDiff(DiffEntry entries){ DiffFormatter diffFormatter = new DiffFormatter(System.out); try { diffFormatter.setRepository(RepositoryUtil.getRepository()); diffFormatter.format(entries); } catch (IOException e) { e.printStackTrace(); }finally { diffFormatter.close(); } }

2.2 在进行 git.diff()方法调用的时候再调用.setOutputStream(System.out)

就像这样,当然传入的参数不止可以是 System.out,只要是 OutputStream 就行

return git.diff().setOutputStream(System.out) .setOldTree(oldTreeParser) .setPathFilter(PathFilter.create(path)) .call();
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...