SVN服务(SubVersion)
1.首先介绍SVN(SubVersion)
Svn是近年来崛起的非常优秀的版本管理工具,与CVS一样,SVN是一个跨平台的开源的版本控制系统。SVN版本管理着随时间改变的各种数据。这些数据放置在一个中央资料档案(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是与众不同的是,SVN会备份并记录每个文件每一次修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录。
2.那么为什么会有SVN这样一个项目呢?
官方的解释是,为了接管CVS用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。问题见SVN官方首页。
SVN是一个非常通用的软件系统, 他常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本、视频、图片等等。
截止到目前为止,常见的版本管理软件有:vss(微软),cvs,svn,git。
3.SVN与git的区别?
3.1 SVN集中式版本控制系统
SVN版本控制系统是集中式数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这版本库,提交代码也都必须提交到这个中央版本库。
SVN版本控制系统工作流程如下:
①在中央库创建或从主干复制一个分支。
②从中央库check out下这个分支的代码。
③增加自己的代码文件,修改现存的代码或删除代码的文件。
④commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先update一下然后再提交。,up代码的时候如果出现了冲突,需要解决好冲突之后再进行提交。
使用SVN的缺点:
当你无法连接到中央版本库的情况下,那么你无法提交代码,将代码加入版本控制;你无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码
我们都默认公国自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现为可测试的功能,那么你需要等很长的时间才能提交自己的代码,由于代码库集中
管理的,因此,需要对中央版本库的存储做备份。这点分布式的版本控制系统要好一些!SVN的备份要备份所有代码数据以及所有更改的版本记录。
3.2 git分布式的版本控制
Git是由Linus开发的,所以很自然的git和linux文件系统结合的非常紧密。以至于windows上你必须使用cygwin才能使其完美的工作。
那git凭啥叫分布式版本控制系统呢?还是从其工作模式讲起吧。git中没有了中央版本库的说法了,但是为了开发小组的代码共享,我们通常还是会搭建一个
远程的git仓库。但是和svn不同的是,开发者本地包含了一个完整的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从之
分。如果你的项目是闭源的,或者你习惯于以往的集中式管理模式的话,那么在git下你也可以像svn那样的工作,并将其add到远程git 。
①你本地创建一个git库,并将其add到远程git库中。
②你在本地添加或者删除文件,然后commit,当然commit操作都是提交到本地的git库中(其实是提交到git目录下的objects目录中去了)
③将本地git库的分支push到远程git库的分支,如果这个远程git库中已经有别的人push过,那么远程git库将不允许你push,这时候你需要先pull,然后如果有冲突,处理好冲突,commit到本地库后,再push到远程git库。
4.运维人员掌握版本管理
对于管理系统运维人员需要掌握的技术点:
1.安装、部署、维护、排障
2.简单使用,很多公司都是由开发来管理,包括建立仓库和添加删除账号。
3.对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的。
5.SVN服务运行方式和访问模式
5.1 SVN服务运行方式
SVN服务常见的运行访问方式
①独立服务器访问:比如svn://svn.xxxxx.org
②借助apache等http服务:如http://svn.xxxxx.org/sadoc
a.单独安装apache+svn
b.CSVN(apache+svn)是一个单独的整合软件,带web界面管理的svn软件。
③直接本地访问:比如file://application/svndata/sadoc
5.2 SVN客户端访问模式
Svn客户端可以通过很多种方式访问服务端,例如:本地磁盘访问,或各种各样不同的网络协议访问,但一个版本库地址永远是一个URL,URL反映了访问方法。
访问方式 | 说明 |
file:// | 直接通过本地磁盘或者网络磁盘访问版本库 |
http:// | 通过WebDAV协议访问支持SubVersion的Apache服务器 |
https:// | 与http://类似,但是支持SSL加密访问。 |
Svn:// | 通过TCP/IP自定义协议访问svnserve服务器 |
Svn+ssh:// | 通过认证并加密的TCP/IP自定义协议访问svnserve服务器 |
5.3 SVN档案库数据格式
SVN存储版本数据有两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时有可能锁住数据,所以还是FSFS方式更安全一点。
BDB:
伯克利DB(Berkeley DB),版本局可以使用的一种经过充分测试的后台数据库实现,不能在通过网络共享的文件系统上使用,伯克利DB是SVN1.2版本以前的缺省版本库格式。
FSFS:
一个专用于SunVersion版本库的文件系统后端,可以使用网络文件系统(NFS或SMBFS)。是1.2版本及其后的缺省版本库格式
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件加上一些额外的信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。
SVN是基于关系数据库(BDB)或一系列二进制文件的(FSFS)一方面解决了许多问题(例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性)。然而另一方面,数据存储由此变得不透明,不能像ftp,samba,nfs等能看到实体文件了。
5.4 SVN逻辑架构图
5.5 SVC版本管理使用的工作流程以及优缺点介绍
①首先从SVN服务器下载项目组最新代码
②进入自己的分支进行开发工作,每隔一小时向服务器提交自己的分支提交一次代码(很多程序员都有这个习惯。因为有时候自己对代码改来改去,最后又想恢复到前一个小时的版本或者看看前一个小时自己修改了哪些代码,就需要这样做了)
③下班时间到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器
缺点:
1、由于每一次提交都保留一个原始副本,因此SVN数据库容量会暴增
2、如果不能连接到SVN服务器上,基本上不可以工作,例如第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
3、不适合开源系统开发【当然也未必,但是很多人的话svn未必运行的很好】(开发人数非常多,但是Google app
engine就是用svn的)。但是一般集中式管理的有非常明确地权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问
题。
优点:
1、管理方便,逻辑清晰明确,符合一般人的思维习惯。
2、易于管理,集中式svn服务器更能保证数据的安全型
3、代码一致性非常高
4、适合开发人数不多的项目开发
5、普及度高,大部分软件配置管理的大学教材都是使用svn和vss。