java操作svn工具类SvnUtil
直接上代码,工作中使用的版本,记录下。
- 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:
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.7</version>
- </dependency>
- <dependency>
- <groupId>org.tmatesoft.svnkit</groupId>
- <artifactId>svnkit</artifactId>
- <version>1.8.2</version>
- </dependency>
java操作svn工具类SvnUtil的更多相关文章
- Java操作Redis工具类
依赖 jar 包 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...
- Java操作Excel工具类(poi)
分享一个自己做的poi工具类,写不是很完全,足够我自己当前使用,有兴趣的可以自行扩展 1 import org.apache.commons.lang3.exception.ExceptionUtil ...
- java操作excel 工具类
java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...
- Java操作FTP工具类(实例详解)
这里使用Apache的FTP jar 包 没有使用Java自带的FTPjar包 工具类 package com.zit.ftp; import java.io.File; import java.i ...
- java操作mongodb工具类
新建maven项目 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- JAVA 操作Excel工具类
Bean转Excel对象 /* * 文件名:BeanToExcel.java */ import java.util.ArrayList; import java.util.List; import ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
- java中文件操作的工具类
代码: package com.lky.pojo; import java.io.BufferedReader; import java.io.BufferedWriter; import java. ...
随机推荐
- CodeForces - 468A
Little X used to play a card game called "24 Game", but recently he has found it too easy. ...
- BottomNavigationBarItem fixed
BottomNavigationBar( type: BottomNavigationBarType.fixed, onTap: (value){ if more then 3 items,, use ...
- Java线程池ThreadPoolExecutor原理和用法
1.ThreadPoolExecutor构造方法 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAli ...
- java如何编写多线程
1.如何实现多线程 1.1实现Runnable接口,实现run()方法. public class Main4 implements Runnable { public static void mai ...
- 关于html中的 script标签中的 代码写法有效性? easyui tabs的href不能载入内容页面
script标签, 即 html中的 js脚本区域中: 它其实就是一个 普通的 html标签, 在 html 渲染器 parser 看来, 它跟其他任何的普通 的 html标签 , 比如 p 标签, ...
- 利用Java手写简单的httpserver
前言: 在看完尚学堂JAVA300中讲解如何实现一个最简单的httpserver部分的视频之后, 一.前置知识 1.HTTP协议 当前互联网网页访问主要采用了B/S的模式,既一个浏览器,一个服务器,浏 ...
- BalkanOI 2018 Parentrises(贪心+基础DP)
题意 https://loj.ac/problem/2713 思路 对于 \(\text{P1}\) 的档,首先可以看出 \(O(n^3)\) 的方法,即用 \(O(n^3)\) 的 \(\text{ ...
- CAS工程用redis集群存储票据ticket Spring整合
maven jar包版本: <dependency> <groupId>redis.clients</groupId> <artifactId>jedi ...
- Latex 仅使用 hyperref 包中 \href 的方法
参考: How to ask hyperref works only with href Latex 仅使用 hyperref 包中 \href 的方法 在 .tex 文件的开头使用如下方法引用 hy ...
- ios中关键词weak,assign,copy.strong等的区别
虽然开发IOS好多年了.但是这几个关键词总是深深困扰着我.加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了. 先说weak与assign.weak只能修饰对象,不能修饰基本数据类型.而ass ...