Svnkit:远程获取两个提交修订之间的差异

Svnkit: getting the diffs between two commits revision remotely

我想使用 SvnKit 获取两个修订版之间的差异。我查看了文档并在 SVNRepository class 中找到了这个方法,但它只检查本地副本和远程副本之间的差异。

diff(SVNURL url, long targetRevision, long revision, java.lang.String target, boolean ignoreAncestry, SVNDepth depth, boolean getContents, ISVNReporterBaton reporter, ISVNEditor editor)

是否可以在不下载存储库的情况下获取特定存储库的一系列修订的差异?

SVNKit 中有几个 API,基于 SVNRepository 的 API 是最底层的,你需要有良好的 Subversion 内部工作经验才能使用它。

相反,最好使用基于 SvnOperationFactory 的 API,它的工作方式与 "svn diff" 命令非常相似。

    final SvnOperationFactory svnOperationFactory = new SvnOperationFactory();
    try {
        final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        final SvnDiffGenerator diffGenerator = new SvnDiffGenerator();
        diffGenerator.setBasePath(new File(""));

        final SvnDiff diff = svnOperationFactory.createDiff();
        diff.setSources(SvnTarget.fromURL(url, SVNRevision.create(revision1)), url, SVNRevision.create(revision2)));
        diff.setDiffGenerator(diffGenerator);
        diff.setOutput(byteArrayOutputStream);
        diff.run();
    } finally {
        svnOperationFactory.dispose();
    }

它调用 SVNRepository#diff 做了很多工作,除此之外。如果您需要对输出进行更多控制,您可以实现自己的 ISvnDiffGenerator 并将其传递给操作。