使用SVNKit无法在BASE和WORKING之间获得差异

时间:2012-06-18 21:30:48

标签: diff svnkit

我想使用SVNDiffClient获取wc本地更改, 相当于'svn diff -rBASE',这正是this示例所做的。

但是,运行示例中的代码会抛出'org.tmatesoft.svn.core.SVNException:svn:对于挂钩的差异,至少有一个版本必须是非本地的',这正是documentation所说的会。

我希望能够在不点击服务器的情况下比较WORKING和BASE,看看是否有任何变化。 这可以使用SVNKit完成吗?

2 个答案:

答案 0 :(得分:1)

您可以使用新的API:

    final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    final SvnDiff diff = svnOperationFactory.createDiff();
    diff.setSources(SvnTarget.fromFile(workingCopyDirectory, SVNRevision.BASE), SvnTarget.fromFile(workingCopyDirectory, SVNRevision.WORKING));
    diff.setOutput(byteArrayOutputStream);
    diff.run();

答案 1 :(得分:1)

您也可以使用旧的API:

final SVNClientManager clientManager = SVNClientManager.newInstance();
try {
    final SVNDiffClient diffClient = clientManager.getDiffClient();

    final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    diffClient.doDiff(workingCopyDirectory, SVNRevision.BASE, workingCopyDirectory, SVNRevision.WORKING, SVNDepth.INFINITY, false, outputStream, null);

    System.out.println(outputStream);
} finally {
    clientManager.dispose();
}