使用SVNKit 与ANT 导出SVN 版本差异的列表 现在SVN 用的越来越多,很多时候,经常面临这样的问题,怎么才能够知道2 个不同的版本之间的差异。如果使用TortoiseSVN,其实也好办。 首先打开一个项目目录,选择一个目录,单击右键,再选择“show log”。 再选择两个不同的版本(高亮),点击右键“compare revisions”: 这样就得到了两个版本之间的差异文件列表: 如果需要导出,那么选择文件,再右键单击: 这样就得到差异文件了。 不过我们是写程序的,用的最多是Eclipse,窗口切换来去的,多麻烦。还有没有更好的办法呢。回答是有的。在这里我们要非常感谢SVNKIT 这样一个工具包。SVNKIT 是一个纯JAVA的SVN API。Eclipse 的SVN 插件正是基于这个API 的。 先简单介绍一下SVNKIT。这个东西基本上是全能的,支持这样一些特性 支持http(s), svn, svn(+ssh) 以及file 协议访问SVN 库 支持工作拷贝的全部操作 支持仓库的管理操作:创建、装载、导出 没有安装 SVN 的环境也可以用 好啊,这正是我们想要的。怎么做呢?从 SVNKIT API 来看,它提供了一组 Client 接口的API。 通过这些API 我们可以操作工作拷贝,获得仓库版本的信息。为了比较版本之间的差异,我们会使用到SVNDiffClient,为了单独 CheckOut 差异文件,我们会使用到SVNUpdateClient,为了得到差异版本的提交日志,我们会使用到SVNLogClient。 开工。 首先要连接到SVN 库。 //初始化 DAVRepositoryFactory.setup(); //仓库路径 this.branchURL = SVNURL.parseURIEncoded(branchURL); this.username = username; this.password = password; this.startingRevision = SVNRevision.create(startingRevision); this.endingRevision = SVNRevision.create(endingRevision); //仓库访问身份认证 this.authManager = SVNWCUtil.createDefaultAuthenticationManager(this.username, this.password); 然后就是取差异列表。SVN 的 Client 接口提供有回调句柄,回调句柄非常的有用。我们可以实现 ISVNDiffStatu sHandler 接口,进步的处理差异,看看哪个差异是我们需要保留的。在这里,我们认为 NodeKind 必须是文件类型的,而且是新增的或者修改的,那就放入差异列表。 ImplISVNDiffStatusHandler handler = new ImplISVNDiffStatusHandler(changes); diffClient.doDiffStatus(this.branchURL, t...