SVNKit学习——使用High-Level API管理Working Copy示例(六)
本篇内容是基于SVNKit High-Level API实现的针对Working copy的操作,操作内容与SVN图形化界面、命令行类似。
High-Level API类图:
核心思想:
所有操作由各种SVN*Client来管理,而SVNClientManager类封装了所有的SVN*Client,所以我们通常有两种做法(更倾向于后一种):
- 1.可以分别实例化各种SVN*Client类。2.实例化一个SVNClientManager类,实际上在首次请求SVNClient类的时候,它就已经实例化了每个SVN*Client类了。
示例编码:
- package com.demo;
- import com.google.gson.Gson;
- import org.tmatesoft.svn.core.*;
- import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
- import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
- import org.tmatesoft.svn.core.wc.*;
- import java.io.File;
- /**
- * 使用Hign-Level API来操作Working Copy,由于所有的操作比较贴近SVN命令行、客户端的操作,所以理解起来相对容易一些。
- * 对于Working Copy的不同操作被分类封装到不同的SVN*Client中,SVNClientManager类包含这些SVN*Client,所以通常使用SVNClientManager类可以很方便的管理这些SVN*Client
- * 所以我们在操作Working Copy时有两种选择:1.可以分别实例化各种SVN*Client类。2.实例化一个SVNClientManager类,实际上在首次请求SVNClient类的时候,它就已经实例化了每个SVN*Client类了。
- * 具体结构详见类图
- */
- public class ManageWorkingCopy {
- private static SVNClientManager svnClientManager;
- private static final Gson gson = new Gson();
- public static void main(String[] args) throws Exception{
- //1.根据访问协议初始化工厂
- DAVRepositoryFactory.setup();
- //2.使用默认选项
- ISVNOptions isvnOptions = SVNWCUtil.createDefaultOptions(true);
- //3.初始化权限
- String username = "wly";
- String password = "wly";
- char[] pwd = password.toCharArray();
- ISVNAuthenticationManager isvnAuthenticationManager = SVNWCUtil.createDefaultAuthenticationManager(username,pwd);
- //4.创建SVNClientManager的实例
- svnClientManager = SVNClientManager.newInstance(isvnOptions,isvnAuthenticationManager);
- //=========================================demo start=======================================
- //1.导入-import
- // doImport();
- //2.检出-checkout
- // doCheckout();
- //3.创建目录-mkdir
- // doMkDir();
- //4.提交-commit
- // doCommit();
- //5.更新-update
- // doUpdate();
- //6.切换分支-switch
- //7.添加-add,在commit中有体现,提交前,没有加入版本控制的文件需要加入版本控制
- //8.锁定-lock
- // doLock();
- //9.删除-delete
- // doDelete();
- //10.拷贝-copy
- // doCopy();
- //11.状态-status
- // doStatus();
- //12.信息-info
- // doInfo();
- }
- /*
- * 导入-import
- * @throws SVNException
- */
- private static void doImport() throws SVNException{
- SVNProperties svnProperties = new SVNProperties();
- boolean useGlobalIgnores = true;
- boolean ignoreUnknownNodeTypes = true;
- SVNCommitInfo svnCommitInfo = svnClientManager.getCommitClient().doImport(new File("E:\\svnWorkspace\\commonProject"),SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk"),"初始化导入",svnProperties,useGlobalIgnores,ignoreUnknownNodeTypes,SVNDepth.INFINITY);
- System.out.println("执行import操作成功,导入结果:" + gson.toJson(svnCommitInfo));
- }
- /**
- * 检出-checkout
- * 参数:
- * 仓库地址
- * 本地Working Copy地址
- * Peg Revision
- * Revision
- * 检出深度,一般递归检出
- * 是否允许没有版本的障碍物,true的话允许,false不允许,false在checkout的时候如果有障碍物就会停止检出,所以一般是true
- * 返回值:long 当前版本号
- * @throws SVNException
- */
- private static void doCheckout() throws SVNException{
- long nowRevision = svnClientManager.getUpdateClient().doCheckout(SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk"),new File("E:\\svnWorkspace\\projectWorkingCopy"), SVNRevision.HEAD,SVNRevision.HEAD,SVNDepth.INFINITY,true);
- System.out.println("执行checkout操作成功,当前检出的版本号是:" + nowRevision);
- }
- /**
- * 创建目录-mkdir
- * @throws SVNException
- */
- private static void doMkDir() throws SVNException{
- String commitMessage = "创建一个目录";
- SVNCommitInfo svnCommitInfo = svnClientManager.getCommitClient().doMkDir(new SVNURL[]{SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk/aaa"),SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk/bbb")},commitMessage);
- System.out.println("执行mkdir操作成功,操作结果:" + gson.toJson(svnCommitInfo));
- }
- /**
- * 提交-commit
- * commit更改一个文件时,如果文件本身存在,则需要提交其父目录
- * @throws SVNException
- */
- private static void doCommit() throws SVNException{
- File[] files = new File[]{new File("E:\\svnWorkspace\\projectWorkingCopy"),new File("E:\\svnWorkspace\\projectWorkingCopy\\ccc")};
- //没有版本号的先执行add操作
- for(File tempFile : files){
- SVNStatus status = svnClientManager.getStatusClient().doStatus(tempFile,true);
- System.err.println(status);
- if(status == null || status.getContentsStatus() == SVNStatusType.STATUS_UNVERSIONED) {
- System.out.println("文件" + tempFile.getName() + "无版本号");
- svnClientManager.getWCClient().doAdd(tempFile, false, false, false, SVNDepth.INFINITY, false, false);
- }
- }
- //执行commit操作
- svnClientManager.getCommitClient().setIgnoreExternals(false);
- SVNProperties svnProperties = new SVNProperties();
- String[] changeLists = new String[]{};
- SVNCommitInfo svnCommitInfo = svnClientManager.getCommitClient().doCommit(files,false,"提交操作",svnProperties,changeLists,false,false,SVNDepth.fromRecurse(true));
- System.out.println("执行commit操作成功,操作结果:" + gson.toJson(svnCommitInfo));
- }
- /**
- * 更新-update
- * @throws SVNException
- */
- private static void doUpdate() throws SVNException{
- long nowRevision = svnClientManager.getUpdateClient().doUpdate(new File("E:\\svnWorkspace\\projectWorkingCopy"),SVNRevision.HEAD, SVNDepth.INFINITY,true,false);
- System.out.println("执行update操作成功,当前版本号:" + nowRevision);
- }
- /**
- * 锁定-lock
- * @throws SVNException
- */
- private static void doLock() throws SVNException{
- // svnClientManager.getWCClient().doLock(new SVNURL[]{SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk/bbb/aa.txt")},true,"给文件加锁");
- svnClientManager.getWCClient().doLock(new File[]{new File("E:\\svnWorkspace\\projectWorkingCopy\\bbb\\aa.txt")},true,"给文件加锁");
- System.out.println("给文件加锁成功");
- }
- /**
- * 删除-delete
- * @throws SVNException
- */
- private static void doDelete() throws SVNException{
- SVNCommitInfo svnCommitInfo = svnClientManager.getCommitClient().doDelete(new SVNURL[]{SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk/bbb"),SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk/b.txt")},"执行删除操作,删除一个目录bbb一个文件b.txt");
- System.out.println("执行delete操作成功,操作结果:" + gson.toJson(svnCommitInfo));
- }
- /**
- * 复制-copy
- * @throws SVNException
- */
- private static void doCopy() throws SVNException{
- SVNCopySource svnCopySource1 = new SVNCopySource(SVNRevision.HEAD,SVNRevision.HEAD,SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk/aaa/aa.txt"));
- SVNCopySource svnCopySource2 = new SVNCopySource(SVNRevision.HEAD,SVNRevision.HEAD,SVNURL.parseURIEncoded("https://wlyfree-PC:8443/svn/testRepository/trunk/aaa/bb.txt"));
- svnClientManager.getCopyClient().doCopy(new SVNCopySource[]{svnCopySource1,svnCopySource2},new File("E:\\svnWorkspace\\projectWorkingCopy\\bbb"),false,false,true);
- System.out.println("执行copy操作成功");
- }
- /**
- * 状态-status
- * @throws SVNException
- */
- private static void doStatus() throws SVNException{
- SVNStatus svnStatus = svnClientManager.getStatusClient().doStatus(new File("E:\\svnWorkspace\\projectWorkingCopy\\a.txt"),true);
- System.out.println("执行status操作成功,操作结果:" + gson.toJson(svnStatus));
- }
- /**
- * 信息-info
- * @throws SVNException
- */
- private static void doInfo() throws SVNException{
- SVNInfo svnInfo = svnClientManager.getWCClient().doInfo(new File("E:\\svnWorkspace\\projectWorkingCopy\\a.txt"),SVNRevision.HEAD);
- System.out.println("执行info操作成功,操作结果:" + gson.toJson(svnInfo));
- }
- }
SVNKit学习——使用High-Level API管理Working Copy示例(六)的更多相关文章
- SVNKit学习——使用低级别的API(ISVNEditor接口)直接操作Repository的目录和文件(五)
本文是参考官方文档的实现,官方wiki:https://wiki.svnkit.com/Committing_To_A_Repository 本文核心使用的是ISVNEditor这个接口直接对Re ...
- FREE 开源 API 管理工具等
最近学习API 管理工具,发现几个不错的东西,记录如下: 1.IBM 收购NODE 厂家 STRONGLOOP 有一产品LOOPBACK,开源,好! 2.apigee api管理平台 也不错. 3 ...
- Api管理工具(spring-rest-docs)
对于app开发来说,必须需要有相应的api文档,一般最基础的就是用markdown工具来撰写api文档.当对于开发人员来说,是总会想着寻找更方便撰写,测试,对接前端开发的文档生成的工具. 其实这方面的 ...
- ecCodes 学习 利用ecCodes Python API对GRIB文件进行读写
参考 https://www.ecmwf.int/assets/elearning/eccodes/eccodes2/story_html5.htmlhttps://confluence.ecmwf. ...
- 基于SpringCloud的Microservices架构实战案例-在线API管理
simplemall项目前几篇回顾: 1基于SpringCloud的Microservices架构实战案例-序篇 2基于SpringCloud的Microservices架构实战案例-架构拆解 3基于 ...
- API管理之YApi实现前后端高度分离
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11972789.html,多谢,=.=~ 背景描述 前后端分离已成为互联网项目开发的业界标准使 ...
- Jetpack架构组件学习(3)——Activity Results API使用
原文地址:Jetpack架构组件学习(3)--Activity Results API使用 - Stars-One的杂货小窝 技术与时俱进,页面跳转传值一直使用的是startActivityForRe ...
- API管理之利剑 -- Eolink
随着信息化飞速增长的还有各信息系统中的应用接口( API ),API 作为信息系统内部及不同信息系统之间进行数据传输的渠道,其数量随着软件系统的不断庞大而呈指数型增长,如何管理这些 API 已经在业界 ...
- 论元数据和API管理工具
公司里面的很多部门都在广泛的采用元数据管理,也采用了公司内部开发的元数据管理工具,有些部门的实施效果一直非常好,而有些部门的效果则差强人意.这个问题,其实和软件系统开发完成进入维护阶段后成本居高不下的 ...
随机推荐
- Mac下安装配置Python2和Python3并相互切换使用 转
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014259820/article/details/81023224 安装Python2 Mac系统 ...
- Idea 软件使用快捷键归纳
<1>CTRL+P 方法参数提示 <2>ctrl+/ 单行注释 <3>Ctrl+Alt+M IDEA 重复代码快速重构(抽取重复代码快捷键) <4> ...
- BZOJ - 3489 KD树 范围计数 空间思维转换
题意:给定数列\(a[1...n]\),\(Q\)次查询\([L,R]\)中只出现一次的最大值 这道题的做法比较劲.. 对每个元素构造三维空间的点\((i,pre[i],next[i])\),查询\( ...
- Python——爬取瓜子二手车
# coding:utf8 # author:Jery # datetime:2019/5/1 5:16 # software:PyCharm # function:爬取瓜子二手车 import re ...
- Git本地缓存问题 修改密码后git无法拉取
问题描述:使用正确的用户名和密码可以登录到Git代码仓库,但是在本地无法使用Git bash命令行的方式拉取代码. 问题原因:第一次使用Git bash方式拉取代码时,会根据当前的用户和密码生成一串. ...
- esper(4-3)-Non-Overlapping Context
语法 create context context_name start start_condition end end_condition 如: // 9点到17点此context才可用(以引擎的时 ...
- 转 LIST INCARNATION OF DATABASE
incarnation在英文中是“化身”的意思. 那么在oracle中,它又是什么意思呢?有什么作用呢? 我们看一些基本概念 Current Incarnation(当前化身):数据库当前正在使用的化 ...
- oracle 基础知识(七)----动态性能视图
一,动态性能视图介绍 动态性能视图属于数据字典,系统管理员用户 SYS 可以访问它们.在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关.虽然这些视图很像普通的数据库表,但它们不允许用户直 ...
- CentOS6 克 隆
原始机子关机 自己设置名字 保存地址 开机 配置hosts 后面的为你要设置的名字不配置可能xshell链接上不了网 更改名字: 配置网卡 删除物理地址 mac 和 uuid 删除网卡 重启
- 解决IE9 IE8的跨域 请求问题
/// <summary> /// 根据url获取对应的HTML /// </summary> /// <param name="url">&l ...