代码发布架构方案(SVN)
问题:
- 安装优化软件环境nginx,lvs
- 程序代码(不断更新)
- 配置更新(不断变更)
1、SVN介绍
1.1 什么是SVN(Subversion)?
SVN(Subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台开源的版本控制系统。SVN版本管理工具管理着随时间改变的各种数据。这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器。与其他服务器不同的是,SVN会备份记录每个文件每一次的修改变动。这样我们就可以把任意一个时间点的档案回复到想要的某一个旧的版本,也可以直接浏览指定文件的更新历史记录。
为什么会有SVN这样一个项目?
官方解释:为了接管CVS的用户基础,确切的说,我们写了一个新的版本控制系统,他和CVS很相似,但是它修正了CVS所没有解决的问题。详情见官网。
SVN是一个非常通用的软件管理系统,它常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本、视频,图片等等。
SVN相关站点:
Subversion官网:https://subversion.apache.org
SVN客户端:http://tortoisesvn.sourceforge.net/
SVN中文网站:http://svndoc.iusesvn.com/
截止当前常见的版本管理软件有:VSS、CVS、StarTeam、SVN、GIT。
1.2 SVN与GIT的区别
1.2.1 SVN是集中式版本控制系统
SVN版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也必须提交到这个中央版本库。
SVN版本控制系统工作流程如下:
1.在中央版本库上创建或冲主干复制一个分支。
2.从中央版本库上check out 下这个分支的代码。
3.进入自己的分支,进行开发工作。每隔一段时间提交一次代码。
4.在快下班的时候commit代码,假设有人在刚刚的分支上面提交了代码,你就会被提示代码过期,你得先update你的本地代码然后在更新提交。update时如果出现冲突,需要解决好冲突后(代码合并)后在进行提交,把自己的分支代码提交到主干。
优点:
1.对于某些项目的核心代码或者是一些重要的保密性要求较高的项目,svn比git更适合。
2.svn支持空目录
3.svn有更好的windows平台支持
4.svn可以check out/clone一个子树(sub-tree)
5.svn支持特权访问控制svn lock,在处理很难合并的文件时非常有用
6.svn支持二进制文件,更容易处理大文件(不需要把老版本拷来拷去)
7.学习简单、使用简单
缺点:
1.无网的情况下:无法提交代码,无法查看代码的历史版本、无法同步代码
2.代码要定期做备份(所有的代码数据及版本变更记录)
3.分支切换缓慢
4.由于每次提交都会保留一个原始副本,因此SVN的数据库容量会暴增。尤其是在开发人员非常多的情况下。
1.2.2 GIT是分布式版本控制系统
工作模式:
git没有中央版本库,但是为了方便开发小组的成员们进行代码共享,我们通常会搭建一个远程的git仓库。和svn不同的是开发者本地也包含一个完成的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从。
如果你的项目是一个闭源的项目,或者你习惯于以往的集中式管理,那么在git下你也可以向svn那样工作,还不过流程会增加一些步骤。
1.你在本地创建一个git仓库,并将其add到远程的git仓库中
2.你在本地增删改文件,然后commit,这里的commit是提交到本地的git仓库中了(其实就是提交到,本地的git目录下的object目录中)
3. 将本地的git仓库的分支push到远程git的仓库的分支,如果这个时候远程git仓库中已经有别人push过,那么远程的git仓库是不愿徐你push的,这个时候你要先pull,如果有冲突,处理好冲突,commit到本地git仓库后,在push到远程的git库。
优点:
1.比svn方便和快捷的切换分支
2.书写的代码可以随时提交
3.丰富的命令行操作和组合
4.可以一人一个仓库,仓库可以有多个分支
缺点:
1.没有一个较好的桌面集成工具
2.不支持二进制文件
3.学习成本高
1.3 运维人员对版本管理系统需要掌握的
- 安装、部署、维护、排障
- 简单使用,很多公司都是由开发来管理,包括建立仓库和添加删除账号
- 对于版本控制系统,运维人员要相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务
1.4 SVN服务运行方式和访问方式
1.4.1 SVN服务端运行方式
1.独立服务器访问
访问地址如:svn://svn.test.com/test
2.借助Apache等http服务
访问地址如:http://svn.test.com/test
a.单独安装Apache+svn
b.CSVN(Apache+SVN)是一个单独的整合的软件,带web界面管理的SVN软件
3.本地直接访问
1.4.2 SVN客户端访问方式
svn客户端可以通过多种方式访问服务器端,例如:本地磁盘访问,或各种各样的网络协议访问,但是一个版本库地址永远都是只有一个URL,URL反映了访问方法
访问方式 | 说明 |
file:/// | 直接通过本地磁盘或者网络磁盘访问版本库 |
http:// | 通过WebDAV协议访问支持Subversion的Apache服务器 |
https:// | 与http://相似,但是用SSL加密访问 |
svn:// | 通过TCP/IP自定义协议访问是SVN服务器 |
svn+ssh:// | 通过认证并加密的TCP/IP自定义协议访问svn服务器 |
1.5 SVN档案数据格式
svn服务器存储的数据格式有2种方式:BDB(一种事物安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS更安全一点。
BDB:
伯克利DB(Berkeley DB),版本库可以使用的一种经过充分测试的后台数据库实现,不能再通过网络共享的文件系统上使用,伯克利DB是Subversion1.2版本以前的缺省版本库格式
FSFS:
一个专用于Subversion版本库的文件系统后端,可以使用网络文件系统(例如:NFS或SMBFS)。是1.2版本及以后的缺省版本库格式。
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外的信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。
svn是基于关系型数据库的BDB或一系列二进制文件的FSFS。这解决了许多问题(如:并行读写共享文件)以及添加了许多新功能(如:运行时的事物特性)。然而另一方面,数据存储由此变得不透明,不能像ftp,samba,nfs等能看到实体的文件。
1.6 SVN版本系统逻辑学架构原理图
1.7 SVN版本管理工作流程
集中式代码管理的核心是SVN服务器,开发者在开始新一天工作之前必须现在本地update一下代码,然后开发、解决冲突、合并。所有的版本信息都放在SVN上面。