用程序远程控制SVN的解决思路

本文探讨了在项目中如何通过程序控制SVN添加branch和tag,解释了tag和branch的区别及其在SVN中的实现方式。提出了两种控制模式,一种是应用服务器访问驻留服务,另一种是客户端直接调用驻留服务。最终选择了在SVN服务器驻留HTTP服务,通过URL传递参数执行SVN命令行操作的方式,并实现了测试。
摘要由CSDN通过智能技术生成

     SVN的branch和tag以前就知道,但是从来没有用程序控制添加过branch和tag。以前使用,要么是使用SVN的客户端插件,要么就是SVN的客户端软件,添加branch和tag的功能都是会提供的,但最近的一个项目,需要能够在自己的程序功能里面控制添加branch和tag。

 

    先说说这两个东西。

    一般来说,tag是用来标记里程碑的,不管是不是可以release,都是一个可用的版本。所以tag的作用是一个可读的标记,主要是显示用途。
    branch是用来做并行开发的,这里的并行是指和trunk进行比较。比如,3.0开发完成,这个时候要做一个tag,tag_release_3_0;然后基于这个tag做release,比如安装程序等。trunk进入3.1的开发,但是3.0发现了bug,那么就需要基于tag_release_3_0做一个branch,branch_bugfix_3_0,基于这个branch进行bugfix,等到bugfix结束,做一个tag,tag_release_3_0_1,然后根据需要决定branch_bugfix_3_0是否并入trunk。对于svn还要注意的一点,就是它是全局版本号,其实这个就是一个tag的标记,所以我们经常可以看到,什么什么release,基于xxx项目的2xxxx版本。就是这个意思了。但是,它还明确的给出一个tag的概念,就是因为这个更加的可读,毕竟记住tag_release_1_0要比记住一个很大的版本号容易的多。

    对于branch和tag的实现,在SVN中,实际上都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的。【以上三段是抄的哈

    创建tag的SVN命令是这样的:svn copy 源URL 目标URL -m tag描述。当然了,这个命令必须在SVN服务器上执行。

 

    现在项目中的要求是能够在自己的项目中,控制SVN的添加tag的操作,那么首先想到的就是在SVN服务器上做个驻留服务。因此,可行的应该有以下两种控制模式了:


    第一种模式,由A项目的应用服务器,在必要的时候访问SVN服务器上的驻留程序,完成branch和tag的处理,处理顺序如下的12345,这是很基本的思路了,需要进一步明确的是应用服务器访问驻留服务所使用的协议,根据所处的环境,可以选择的范围有http,TCP(Socket)等等。

 


    第二种是干脆由客户端去访问驻留服务,这种思路是基于:在客户端上,除了要访问A项目,还需要直接作为SVN客户端处理一些与SVN有关的工作。因此,在客户端直接通过调用驻留服务完成branch和tag的处理。这种思路好像也说得过去。这里需要确定的也是协议问题,这种模式,似乎走http比较合理。



    分析完毕,是个简单问题吧?你会怎么选择呢?我画完图以后决定选择第一种模式。在SVN服务器驻留一个基于http协议的服务,通过url传递参数(源SVN URL,目标SVN URL,tag说明),调用SVN的命令行,实现branch和tag的添加,并把结果反馈回去。测试通过。
    我的图画的还算清晰吧,配色自我感觉挺好哪,图片背景做成透明好像更好看些哈。

    欢迎访问红尘的新浪博客 http://blog.sina.com.cn/hongchenzpm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值