弄了很久,想使用domove这个操作,但是都失败了。最后给svnkit的邮箱写了封邮件,他们告诉我这样做就成功了。实际上是使用docopy这个函数实现了move操作。
package com.repositoryclient.svnoptions; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory; import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl; import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.io.SVNRepositoryFactory; import org.tmatesoft.svn.core.wc.ISVNOptions; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNCopyClient; import org.tmatesoft.svn.core.wc.SVNCopySource; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.SVNWCUtil; public class StoreManagerCheckResourceOption { private SVNRepository repositoryTrgt; private SVNRepository repositorySrc; public boolean doMove(String userName,String passwd,String sourceDirUrl,String targetDirUrl){ SVNClientManager ourClientManager; // 初始化支持svn://协议的库 SVNRepositoryFactoryImpl.setup(); DAVRepositoryFactory.setup(); FSRepositoryFactory.setup(); SVNURL repositorySrcUrl = null; SVNURL repositoryTrgtUrl = null; try { SVNWCUtil.createDefaultAuthenticationManager(userName,passwd); repositorySrcUrl = SVNURL.parseURIEncoded(sourceDirUrl); repositoryTrgtUrl = SVNURL.parseURIEncoded(targetDirUrl); repositorySrc = SVNRepositoryFactory.create(repositorySrcUrl); repositoryTrgt = SVNRepositoryFactory.create(repositoryTrgtUrl); ISVNAuthenticationManager authManager =SVNWCUtil.createDefaultAuthenticationManager(userName,passwd); repositorySrc.setAuthenticationManager(authManager); repositoryTrgt.setAuthenticationManager(authManager); ISVNOptions options = SVNWCUtil.createDefaultOptions(false); // 实例化客户端管理类 ourClientManager = SVNClientManager.newInstance( (DefaultSVNOptions) options, userName, passwd); SVNCopyClient copyClient = ourClientManager.getCopyClient(); SVNCopySource[] copySources = new SVNCopySource[1]; copySources[0] = new SVNCopySource(SVNRevision.HEAD, SVNRevision.HEAD, repositorySrcUrl); // SVNDirEntry entry = (SVNDirEntry) srcRepository.getDir(sourceDirUrl, -1, null, (Collection) null); // if (entry.getKind() == SVNNodeKind.DIR) { // copyClient.doCopy(copySources, repositoryTrgtUrl, true, false, false, "move", null); // } else { // copyClient.doCopy(copySources, repositoryTrgtUrl, true, false, true, "move", null); // } copyClient.doCopy(copySources, repositoryTrgtUrl, true, false, false, "move", null); // SVNWCClient client = new SVNWCClient(authenticationManager, (ISVNOptions)(SVNWCUtil.createDefaultOptions(true))); // SVNCommitInfo svnInfo = ourClientManager.getLogClient(). // 要把此目录的内容导入到版本库 // File sourceDir = new File(sourceDirUrl); // File targetDir = new File("relative/" + targetDirUrl); // targetDir = targetDir.getAbsoluteFile(); // sourceDir.setReadable(true); // targetDir.setWritable(true); // 执行导入操作 // SVNMoveClient svnMoveClient = ourClientManager.getMoveClient(); // SVNUpdateClient svnUpdateClient = new SVNUpdateClient(authenticationManager, options); // svnMoveClient.doVirtualCopy(sourceDir, targetDir, true); // svnMoveClient.doMove(sourceDir, targetDir); // svnUpdateClient.doRelocate(sourceDir, repositorySrcUrl, repositoryTrgtUrl, true); return true; } catch (SVNException e) { // TODO: handle exception e.printStackTrace(); return false; } } }