博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java操作svn工具类SvnUtil
阅读量:5120 次
发布时间:2019-06-13

本文共 10782 字,大约阅读时间需要 35 分钟。

直接上代码,工作中使用的版本,记录下。

public class SvnUtil {    private static Logger logger = Logger.getLogger(SvnUtil.class);    /**     * 通过不同的协议初始化版本库     */    public static void setupLibrary() {        DAVRepositoryFactory.setup();        SVNRepositoryFactoryImpl.setup();        FSRepositoryFactory.setup();    }    /**     * 验证登录svn     */    public static SVNClientManager authSvn(String svnRoot, String username,                                           String password) {        // 初始化版本库        setupLibrary();        // 创建库连接        SVNRepository repository = null;        try {            repository = SVNRepositoryFactory.create(SVNURL                    .parseURIEncoded(svnRoot));        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);            return null;        }        // 身份验证        ISVNAuthenticationManager authManager = SVNWCUtil                .createDefaultAuthenticationManager(username, password);        // 创建身份验证管理器        repository.setAuthenticationManager(authManager);        DefaultSVNOptions options = SVNWCUtil.createDefaultOptions(true);        SVNClientManager clientManager = SVNClientManager.newInstance(options,                authManager);        return clientManager;    }    /**     * Make directory in svn repository     * @param clientManager     * @param url     *          eg: http://svn.ambow.com/wlpt/bsp/trunk     * @param commitMessage     * @return     * @throws SVNException     */    public static SVNCommitInfo makeDirectory(SVNClientManager clientManager,                                              SVNURL url, String commitMessage) {        try {            return clientManager.getCommitClient().doMkDir(                    new SVNURL[] { url }, commitMessage);        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }        return null;    }    /**     * Imports an unversioned directory into a repository location denoted by a     *  destination URL     * @param clientManager     * @param localPath     *          a local unversioned directory or singal file that will be imported into a     *          repository;     * @param dstURL     *          a repository location where the local unversioned directory/file will be     *          imported into     * @param commitMessage     * @param isRecursive 递归     * @return     */    public static SVNCommitInfo importDirectory(SVNClientManager clientManager,                                                File localPath, SVNURL dstURL, String commitMessage,                                                boolean isRecursive) {        try {            return clientManager.getCommitClient().doImport(localPath, dstURL,                    commitMessage, null, true, true,                    SVNDepth.fromRecurse(isRecursive));        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }        return null;    }    /**     * Puts directories and files under version control     * @param clientManager     *          SVNClientManager     * @param wcPath     *          work copy path     */    public static void addEntry(SVNClientManager clientManager, File wcPath) {        try {            clientManager.getWCClient().doAdd(new File[] { wcPath }, true,                    false, false, SVNDepth.INFINITY, false, false,                    true);        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }    }    /**     * Collects status information on a single Working Copy item     * @param clientManager     * @param wcPath     *          local item's path     * @param remote     *          true to check up the status of the item in the repository,     *          that will tell if the local item is out-of-date (like '-u' option in the SVN client's     *          'svn status' command), otherwise false     * @return     * @throws SVNException     */    public static SVNStatus showStatus(SVNClientManager clientManager,                                       File wcPath, boolean remote) {        SVNStatus status = null;        try {            status = clientManager.getStatusClient().doStatus(wcPath, remote);        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }        return status;    }    /**     * Commit work copy's change to svn     * @param clientManager     * @param wcPath     *          working copy paths which changes are to be committed     * @param keepLocks     *          whether to unlock or not files in the repository     * @param commitMessage     *          commit log message     * @return     * @throws SVNException     */    public static SVNCommitInfo commit(SVNClientManager clientManager,                                       File wcPath, boolean keepLocks, String commitMessage) {        try {            return clientManager.getCommitClient().doCommit(                    new File[] { wcPath }, keepLocks, commitMessage, null,                    null, false, false, SVNDepth.INFINITY);        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }        return null;    }    /**     * Updates a working copy (brings changes from the repository into the working copy).     * @param clientManager     * @param wcPath     *          working copy path     * @param updateToRevision     *          revision to update to     * @param depth     *          update的深度:目录、子目录、文件     * @return     * @throws SVNException     */    public static long update(SVNClientManager clientManager, File wcPath,                              SVNRevision updateToRevision, SVNDepth depth) {        SVNUpdateClient updateClient = clientManager.getUpdateClient();        /*         * sets externals not to be ignored during the update         */        updateClient.setIgnoreExternals(false);        /*         * returns the number of the revision wcPath was updated to         */        try {            return updateClient.doUpdate(wcPath, updateToRevision,depth, false, false);        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }        return 0;    }    /**     * recursively checks out a working copy from url into wcDir     * @param clientManager     * @param url     *          a repository location from where a Working Copy will be checked out     * @param revision     *          the desired revision of the Working Copy to be checked out     * @param destPath     *          the local path where the Working Copy will be placed     * @param depth     *          checkout的深度,目录、子目录、文件     * @return     * @throws SVNException     */    public static long checkout(SVNClientManager clientManager, SVNURL url,                                SVNRevision revision, File destPath, SVNDepth depth) {        SVNUpdateClient updateClient = clientManager.getUpdateClient();        /*         * sets externals not to be ignored during the checkout         */        updateClient.setIgnoreExternals(false);        /*         * returns the number of the revision at which the working copy is         */        try {            return updateClient.doCheckout(url, destPath, revision, revision,depth, false);        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }        return 0;    }    /**     * 确定path是否是一个工作空间     * @param path     * @return     */    public static boolean isWorkingCopy(File path){        if(!path.exists()){            logger.warn("'" + path + "' not exist!");            return false;        }        try {            if(null == SVNWCUtil.getWorkingCopyRoot(path, false)){                return false;            }        } catch (SVNException e) {            logger.error(e.getErrorMessage(), e);        }        return true;    }    /**     * 确定一个URL在SVN上是否存在     * @param url     * @return     */    public static boolean isURLExist(SVNURL url,String username,String password){        try {            SVNRepository svnRepository = SVNRepositoryFactory.create(url);            ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(username, password);            svnRepository.setAuthenticationManager(authManager);            SVNNodeKind nodeKind = svnRepository.checkPath("", -1);            return nodeKind == SVNNodeKind.NONE ? false : true;        } catch (SVNException e) {            e.printStackTrace();        }        return false;    }    public static SVNRepository getRepository(String url, String username, String password) {        DAVRepositoryFactory.setup();        SVNRepositoryFactoryImpl.setup();        SVNRepository repository = null;        SVNNodeKind nodeKind = null;        try {            repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));            ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(username, password);            repository.setAuthenticationManager(authManager);            nodeKind = repository.checkPath("", -1);        } catch (Exception e) {            throw new RuntimeException(e);        }        if (nodeKind == SVNNodeKind.NONE) {            throw new RuntimeException("There is no entry at '" + url + "'.");        } else if (nodeKind == SVNNodeKind.FILE) {            throw new RuntimeException("The entry at '" + url + "' is a file while a directory was expected.");        }        return repository;    }}

  

使用示例:

public String Checkout(Model model) throws Exception {        //初始化支持svn://协议的库。 必须先执行此操作。        SVNRepositoryFactoryImpl.setup();        //相关变量赋值        SVNURL repositoryURL = null;        try {            repositoryURL = SVNURL.parseURIEncoded(svnurl);        } catch (Exception e) {            //        }        String name = "test";//用户名        String password = "123456";//密码        ISVNOptions options = SVNWCUtil.createDefaultOptions(true);        //实例化客户端管理类        ourClientManager = SVNClientManager.newInstance(                (DefaultSVNOptions) options, name, password);        //要把版本库的内容check out到的目录        File wcDir = new File(localurl);        long workingVersion = -1;        try {            workingVersion = SvnUtil.checkout(ourClientManager, repositoryURL, SVNRevision.HEAD, wcDir, SVNDepth.INFINITY);        } catch (Exception e) {            e.printStackTrace();        }        model.addAttribute("msg", "把版本:" + workingVersion + " check out 到目录:" + wcDir + "中。");        System.out.println("把版本:" + workingVersion + " check out 到目录:" + wcDir + "中。");        return "msg";    }

  Maven:

log4j
log4j
1.2.7
org.tmatesoft.svnkit
svnkit
1.8.2

  

转载于:https://www.cnblogs.com/len0031/p/9039887.html

你可能感兴趣的文章
11生成器相关及推导式(附内置函数分析图url)
查看>>
18面向对象--成员和组合
查看>>
13正则表达式
查看>>
20反射、md5加密、以及日志模块logging(复习)
查看>>
15(os、random、sys、)(json、pickle )
查看>>
#python2和python3的区别汇总。
查看>>
17面向对象--三大特性
查看>>
23python多线程、多进程和锁相关
查看>>
19面向对象--特殊成员
查看>>
2、django路由(urls)
查看>>
21网络编程(socket、黏包现象、socketserver模块)
查看>>
3、django视图的响应和模板的继承
查看>>
22网络基础:OSI7层模型和TCP握手挥手
查看>>
24 IO多路复用and异步非阻塞and协程
查看>>
第七次上机实验
查看>>
java RSA验签
查看>>
关于textarea多行内容的水平垂直居中
查看>>
学习笔记:二维凸包-Andrew算法
查看>>
在Gridview中实现多选
查看>>
数据库的操作
查看>>