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

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内部构件一起使用的良好经验。

相反,最好使用与“ svn diff”命令非常相似的基于SvnOperationFactory的API。

    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并将其传递给操作。

08-27 17:43