首页 > Java > 工具篇 > 版本控制器:SVN教程
2014
10-05

版本控制器:SVN教程

版本控制器:SVN教程12

一、SVN工作原理

SVN(SubVersion)的基本工作思路是这样的:在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码库管理员统一管理这些源程序。

每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地(Checkout),然后用户可以在本地任意修改,最后用svn命令进行提交(Commit),由svn源代码库统一管理修改。如下图:

版本控制器:SVN教程202

  • SVN服务器:运行SubVersion服务的计算机,SubVersion支持Linux和Windows,更多的是安装在Linux下。SVN提供服务有两种方式(运行方式):独立服务器和借助Apache服务器,分别使用SVN协议和Http协议。
  • SVN客户端:用户通过SVN客户端同SVN服务器打交道,SVN客户端分为命令行工具和图形化工具。最流行的客户端是TortoiseSVN。也可以在Eclipse中使用SVN插件。

版本控制器:SVN教程414

二、SubVersion的使用

可以在http://subversion.apache.org/packages.html下载SVN并安装(本文使用windows版本,过程不多说)。在SVN中集成了服务器端和客户端组件:

  • 服务器组件(管理员用):svnadmin、svnserve
  • 客户端组件(程序员用):svn

这些组件命令都位于SubVersion安装目录下的bin目录下。

友情提示:安装完SVN后,通过”svnadmin –version”验证是否安装成功。如果出现错误“svnadmin不是内部或外部命令”,则需要手动将SVN的bin目录加入到path环境变量下。

1、创建SVN仓库

1)先创建一个目录:E:\svnrepo\repoDemo1。后面就使用该目录作为SVN仓库。

2)创建仓库:svnadmin create E:\svnrepo\repoDemo1。创建仓库后的目录结构如下:

版本控制器:SVN教程821

3)启动SVN服务:svnserve -d -r E:\svnrepo\repoDemo1,如下图:

版本控制器:SVN教程874

这样就启动了repoDemo1这个仓库的服务(单仓库),如果在svnrepo目录下还有其他仓库,且要同时启动多个仓库,执行svnserve -d -r E:\svnrepo即可(多仓库)。

一般情况下,访问SVN仓库的URL格式形如:svn://192.168.1.6/repoDemo1,但如果启动的是单仓库,则URL直接用:svn://192.168.1.6表示。svn协议的默认端口号为3690。

小技巧:如果需要频繁使用该仓库,则可将该SVN服务注册成windows服务,这样在计算机开机时就可以启动该服务。如下图:

版本控制器:SVN教程1140

删除该windows服务:sc delete svnService。

2、SVN客户端操作(命令行)

重点:checkout(检出)、commit(提交)、update(更新)

1)在E盘下建立user1、user2两个目录,模拟两个协同工作的用户的workspace。

2)检出:第一次和SVN服务器交互时,需要使用checkout将仓库检出到本地。

版本控制器:SVN教程1319

说明:检出一次,就建立了与SVN仓库的连接。

3)提交:commit

在user1目录下新建Demo1.java文件,将该文件提交到SVN仓库。下图演示了三种典型的错误提交。

版本控制器:SVN教程1409

4)更新:update

切换到user2的工作空间(user2目录下),user2第一次使用SVN仓库,需要检出。user2修改Demo1.java后提交。切换到user1目录,更新(update)。

版本控制器:SVN教程1512

5)删除与恢复:delete、revert

版本控制器:SVN教程1536

说明:如果delete后,提交到服务器(commit),则服务器上的数据也被删除了(慎用)。

三、SVN的目录约定

  • /trunck:开发主线
  • /branches:支线副本
  • /tags:标签副本(一旦创建,不允许修改)

1)使用trunk作为主要的开发目录

一般的,我们的所有的开发都是基于trunk进行开发,当一个版本(release)开发告一段落(开发、测试、文档、制作安装程序、打包等结束后),代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。

当下一个版本/阶段的开发任务开始时,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发。

2)下图为struts2的SVN仓库目录:

版本控制器:SVN教程1989

现在Struts2的代码使用git管理,所以现在查看Struts2的SVN仓库是空的。


留下一个回复

你的email不会被公开。