在实际开发中SVN解决需求:
1.代码备份
2.代码还原
3.协同修改
4.多版本项目文件管理
5.追溯问题代码的编写人和编写时间
6.权限控制
SVN属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器。SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等。
SVN 的工作原理:采取客户端/服务器模式——在服务器的版本库中保存项目文件的各个版本,
所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。
SVN 支持程序员将本地副本更新到服务器端的最新版本,也支持将本地副本的最新改变更新到服务器端, 而且后的更新不会覆盖前面的更新,而是作为一个新的版本被保存下来——SVN甚至支持将本地工作副本恢复为服务器端保存的某一个历史版本。
①检出(checkout):将一个服务器端创建好的项目整个下载到本地,这是到项目组后参与开发的第一步,只需执行一次。
②更新(update):将本地文件更新为服务器端的最新版本,通常为每天上班时或修改公共文件之前执行一次。
③提交(commit):将本地修改提交到服务器端。通常每天下班前或每实现一个功能、完成一个模块时执行一次。
版本控制管理操作
服务器——checkout(检出,下载整个源码到本地)——》客户端
服务器——update(更新,与服务器最新版本保持一致)——》客户端
服务器《——commit(提交)——客户端
Subversion安装与配置
1.安装服务器端程序
①服务器端程序版本,官方网站推荐使用的版本是 1.8.9
②下载源码包,Apache 组织自己维护更新的只是 Subversion 的源码,各个版本的源码包的下载地址是:http://subversion.apache.org/download/
③下载二进制安装包,Subversion 在不同平台下的二进制包是由不同组织构建实现的,服务器端程序的下载地址可以使用:http://sourceforge.net/projects/win32svn/files/latest/download
④双击运行 Setup-Subversion-1.8.9-1.msi
⑤安装程序会自动配置 Path 环境变量,如:D:\DevInstall\Subversion\bin , bin 目录下的可执行文件可以在任意目录下运行。
⑥验证是否安装成功,在命令行输入: svn --version
2.配置版本库
Subversion 是将文件数据信息保存到版本库中进行管理的, 为了满足用户的不同需求, Subversion 允许用户对版本库目录进行定制。
①创建根目录,在一个非中文无空格目录下创建一个文件夹,作为版本库的根目录。例如: D:\DevRepository\Subversion
在版本库根目录下创建与具体项目对应的子目录——这样做的目的是使一个SVN 服务器能够同时管理多个项目,而不是为每一个项目搭建一个 SVN 服务器——这显然太浪费资源了。
例如: D:\DevRepository\Subversion\CRM
D:\DevRepository\Subversion\ERP
D:\DevRepository\Subversion\OA
②创建版本库,也就是具体项目对应的子目录,通过dos命令创建相应目录 ,svnadmin create (文件夹路径)
③运行命令SVN ,命令为:svnserve -d (-d表示后台执行) -r(-r表示版本库根目录) 版本库的路径
创建成功版本库后,版本库会出现以下目录
conf配置文件、db存储版本数据的数据库、hooks钩子程序(类似触发)、locks文件的锁定
④启动服务器端程序 ,启动SVN服务有两种方式:
第一种命令行
svnserve -d (表示后台执行) -r(表示版本库根目录) 版本库的路径
可以通过监听3690端口 netstat -an 若能找到3690则确认启动
第二种注册Windwos服务
binpath参数分析如下:
版本库目录:
sc(windows提供命令) create SVNService(服务名) binpath= "svnserve.exe路径 --service -r 版本库根路径" start= auto depend= Tcpip
●在 Win7 及以上系统中,运行该命令需要管理员权限,否则会被拒绝访问,最好关闭所有杀毒软件
此时查看当前系统中的服务,可以看到我们刚刚创建的服务,但此时它还没有启动,如果创建失败,需检查sc命令是否正确
Eclipse中SVN插件安装
直接解压到dropins
Linux中安装SVN
>yum -y install subversion
此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行
若需查看svn安装位置,可以用以下命令:
>rpm -ql subversion
第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)
选择在var路径(或者其他路径)下创建版本库,当前处于根目录下,一次性创建如下:
>mkdir /var/svn/svnrepos
第三步:创建svn版本库
在第二步建立的路径基础上,创建版本库,命令如下:
>svnadmin create /var/svn/svnrepos/xxxx (xxxx为你预期的版本库名称,可自定义)
创建成功后,进入xxx目录下
>cd /var/svn/svnrepos/xxxx
进入配置文件的文件夹
>cd /var/svn/svnrepos/xxxx/conf
查看该版本库下面的文件
>ls
authz passwd svnserve.conf
- authz 是权限控制文件
- passwd 是帐号密码文件
- svnserve.conf 是SVN服务配置文件
配置passwd
左边是用户名=右边是密码
配置authz
test
只有只读权限,除此之外,其它用户均无任何权限,最后一行*=
很重要不能少。
拓展:使用用户分组
[groups]
group1 = liuxianan
group2 = test1,test2
[/]
@group1 = rw
@group2 = r
* =
上面配置中创建了2个分组,分组1的用户可读可写,分组2的用户只读。
配置svnserve.conf

>svnserve -d -r /home/svn(启动)
>killall svnserve(停止)
启动时遇到的问题:
启动svnserve时出现cannot bind server socket:address already in use
解决方法:
方法一:
查看端口 netstat -an | grep
然后杀死进程占用的端口 killall svnserve
方法二:重新指定一个端口号(默认端口3690)
svnserve -d --listen-port 3691 -r /opt/svndata/repos
=======================================================================================
Subversion提供以下主要功能:
CVS 只能跟踪单个文件的历史, 不过 Subversion 实作了一个 “虚拟” 的版本控管文件系统, 能够依时间跟踪整个目录的变动。 目录和文件都能进行版本控制。
(2)真实的版本历史
自从CVS限制了文件的版本记录,CVS并不支持那些可能发生在文件上,但会影响所在目录内容的操作,如同复制和重命名。除此之外,在CVS里你不能用拥有同样名字但是没有继承老版本历史或者根本没有关系的文件替换一个已经纳入系统的文件。在Subversion中,你可以增加(add)、删除(delete)、复制(copy)和重命名(rename),无论是文件还是目录。所有的新加的文件都从一个新的、干净的版本开始。
(3)自动提交
一个提交动作,不是全部更新到了档案库中,就是完全不更新。这允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。
(4)纳入版本控管的元数据
每一个文件与目录都附有一組属性关键字并和属性值相关联。你可以创建, 并儲存任何你想要的Key/Value对。 属性是随着时间来作版本控管的, 就像文件內容一样。
(5)选择不同的网络层
Subversion 有抽象的档案库存取概念, 可以让人很容易地实作新的网络机制。 Subversion 可以作为一个扩展模块嵌入到Apache HTTP 服务器中。这个为Subversion提供了非常先进的稳定性和协同工作能力,除此之外还提供了许多重要功能: 举例来说, 有身份认证, 授权, 在线压缩, 以及文件库浏览等等。还有一个轻量级的独立Subversion服务器, 使用的是自定义的通信协议, 可以很容易地通过 ssh 以 tunnel 方式使用。
(6)一致的数据处理方式
Subversion 使用二进制差异算法来异表示文件的差异, 它对文字(人类可理解的)与二进制文件(人类无法理解的) 两类的文件都一视同仁。 这两类的文件都同样地以压缩形式储存在档案库中, 而且文件差异是以两个方向在网络上传输的。(7)有效的分支(branch)与标签(tag)
在分支与标签上的消耗并不必一定要与项目大小成正比。 Subversion 建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。所以这些操作只会花费很小, 而且是固定的时间。
(8)Hackability
Subversion没有任何的历史包袱; 它主要是一群共用的 C 程序库, 具有定义完善的API。这使得 Subversion 便于维护, 并且可被其它应用程序与程序语言使用。