相信对于小白来讲git和svn的学习门槛稍微高一些,今天分享一下svn的简单的安装和使用说明.

掌握版本管理的程度: 1、安装、部署、维护、排障。 2、简单使用,很多公司是由开发来管理,包括建立新仓库和添加删除帐号。 3、对版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务。

代码发布的流程: 安装优化软件环境nginx,kvs <==运维工程师 程序代码 (不断更新) <==开发工程师,开发+运维 配置变更(不断变更)。 <==运维工程师

什么是 Subversion?

Subversion 是一个 免费/开源 的 版本控制系统 (version control system, VCS), 也就是说, Subversion 可以跨越时间地对文件和目录, 以及它们的修改进行管理. 这就允许你恢复数据的旧版本, 或检查数据的修改历史. 由于这个特点, 很多人把版本控制系统 看成是一种 “时间机器”.

Subversion 可以跨越网络进行操作, 这就允许多个用户在不同的机器上工作. 从某种程度上讲, 允许用户在各自的空间里修改和管理同一组数据可以促进团队 协作, 因为修改不再是单线进行, 开发速度会更快. 由于所有的工作都被记录在 案, 也就不用担心并行开发会降低软件的质量—如果出现不正确的修改, 只 要撤消那一次更改操作即可.

某些版本控制系统同时也是 软件配置管理 (software configuration management, SCM) 系统. 这种系统经过精巧的设计, 专门用于管理源代码树, 具备许多与软件开发有关的 特性—理解编程语言, 提供了程序构建工具. 但 Subversion 不是 SCM, 它是一个通用系统, 可以管理 任意 类型的文件集合. 对你来说, 这些文件可能是源代码文件—对别人来说, 可能是一个货物清单 或数字电影.

版本控制解决了: *代码管理混乱 *解决代码冲突困难 *在代码整合期间引发bug *无法对代码的拥有者进行权限控制 *项目不同版本的发布困难

svn与git的区别 1、svn: svn版本控制是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发使用的代码都是来自这个版本库,在中央版本库中建立多个项目; svn工作流程: 1、在中央版本库中创建一个项目,项目中包含主干和分支,分支是从主干复制的; 2、开发人员从中央版本库check out 下这个分支的代码; 3、增加自己的代码、修改或删除现存的代码; 4、commit 代码,如果修改期间其他人提交了代码,就会提示过期无法提交,就需要先up,之后再提交;如果up代码时出现冲突,就需要解决冲突之后在提交(开发人员协商解决冲突) 5、测试环境测试,解决问题之后合并到主干中,在之后更新生产环境代码; 缺点: 1、严重依赖网络环境,连接不到中央版本库时无法工作; 2、需要备份-------------------------->需要备份数据和修改的历史记录 2、git: git是有Linus 开发的,所以和linux结合比较紧密,以至于windows需要使用cygwin才能完美工作;git是分布式版本控制系统,没有中央版本库的说法,和svn不同的是,开发者本地有一个完整的git仓库,但是实际使用中需要建立一个远程的git仓库,以方便共享代码和版本控制; git工作流程: 1、本地创建一个git库,并将其add到远程git库中; 2、在本地添加、删除、修改文件,然后commit,此时commit 是提交到本地git仓库中; 3、将本地git库分支push到远程git库的分支,如果此时远程已经有别人push过,那远程git将不允许你push,必须先pull。并解决冲突之后才能在push到远程git库; 优点: 1、开发时不依赖网络,随时commit到本地,和随时查看修改历史,只有在合并代码时才需要连接远程git仓库; 2、svn还是主流,git正在发展,将来会成为主流,都掌握会更好

svn之运行方式和访问方式: 运行方式: 1、独立服务器访问:(svn://svn.etiantian.org/www/) 2、和apache等http服务结合:(http://svn.etiantian.org/www/) a、单独安装apache+svn; b、csvn()是一个整合好的一体软件,带有web管理页面的svn软件; 3、本地直接访问:(file://application/data/www/) 访问方式: 访问方式 说明 file:// 直接访问本地磁盘或网络磁盘访问版本库 http:// 通过webdav协议访问支持subversion的apache服务器 https:// 与http://类似,只是用了ssl加密访问 svn:// 通过TCP/IP自定义协议访问subversion服务器 svn+ssh:// 通过认证并加密的TCP/IP自定义协议访问subversion服务器

svn之档案数据格式说明:(了解即可) 1、subversion 存储的数据不能看到文件实体; 2、BDB(一种事务安全型类型):(伯克利DB) subversion 1.2 版本以前默认的存储方式;可能出现锁住数据的的问题; 3、FSFS(一种不需要数据库的存储系统): subversion 1.2 版本及以后的默认存储格式; 备注: SVN存储版本数据有2种方式:BDB和FSFS。因为BDB方式在服务器中断时,有可能锁住数据库,所以还是FSFS方式更安全一点。 BDB 伯克利DB(Berkeley DB),版本库可以使用的一种经过充分测试的后台数据库实现,不能在通过网络共享的文件系统上使用,伯克利DB是Subversion 1.2版本以前的缺省版本库格式。 FSFS 一个专用于Subversion 版本库的文件系统后端,可以使用网络文件系统(例如:NFS或SMBFS)。是1.2版本以后的缺省版本库格式。 SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件(FS_FS)。一方面这解决了许多问题(例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性)。然而另一方面,数据存储由此变得不透明,不能像ftp,samba,nfs等双腿看到实体文件了。

Svn工作原理:

SVN版本系统逻辑架构原理图:

Svn的工作流程:

集中式代码管理的核心是SVN服务器同,所有开发者在开始新一天的工作之前必须从服务器上获取代码,然后进行开发,最后解决冲突、提交。然后所有的版本信息都放在SVN服务器上。因此如果脱离了服务器,开发者就无法进行提交代码的工作。 开发者利用SVN版本管理系统工作过程 举例说明: 1、首先从SVN服务器下载项目组最新代码。 2、进入自己的分支,进行开发工作,每隔一小时向服务器上自己的分支提交一次代码(很多开发者都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了那些代码,就需要这样做了)。 3、下班时间快到了,把自己的分支合并到服务器上主分支上,一天的工作完成,并反映给服务器。 这是经典的SVN工作流程,从流程上看,有缺点也有优点。 优点: 1、管理方便,逻辑清晰明确,符合一般人思维习惯。 2、易于管理,集中式SVN服务器更能保证数据安全性。 3、代码一致性非常高。 4、适合开发人数不多的项目开发。 5、普及度高,大部分软件配置管理的大学教材都是用SVN和VSS。 缺点: 1、由于每一次提交都保留一个原始整体,因此SVN数据库容量暴增。 2、如果不能连接SVN服务器上,基本上不可以工作,例如上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。 3、不适合开源系统开发(开发人数非常多,但是Google appengine就是用SVN的)。但是一般不集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。

subversion目录说明: dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据 db目录:就是所有版本控制的数据存放文件 hooks目录:放置hook脚本文件的目录 locks目录:用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端 format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号 conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)

安装步骤: wget http://mirror.metrocast.net/apache/subversion/subversion-1.9.7.tar.gz Wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz Wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz yum install expat-devel yum -y install zlib zlib-devel 安装apr、apr-util tar -zxvf apr-1.6.3.tar.gz cd apr-1.6.3 ./configure --prefix=/usr/local/apr/ make && make install

tar -zxvf apr-util-1.6.1.tar.gz cd apr-util-1.6.2 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make && make install 安装sqlite wget https://www.sqlite.org/2017/sqlite-autoconf-3200100.tar.gz --no-check-certificate tar xf sqlite-autoconf-3200100.tar.gz cd sqlite-autoconf-3200100 ./configure --prefix=/usr/local/sqlite --enable-libtool-lock make && make install 安装Subversion tar -zxvf subversion-1.9.7.tar.gz cd sbuversion-1.9.7 ./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite --with-zlib make && make install 根据主机环境的不同,可能会有缺少库的情况,根据错误提醒,安装相应库。

运行Subversion

官网小例子:使现有目录成为存储库的工作副本

$vim /etc/profile 增加如下: export SVN_HOME=/usr/local/svn/ export PATH=$PATH:$SVN_HOME/bin $ source /etc/profile $ mkdir -p /data/.svnrepos/ //创建svn目录 $ svnadmin create /data/.svnrepos/project1 //创建项目目录

svnadmin create ~/.svnrepos/project1命令会在project1 文件夹下创建相应的配置文件,验证需要配置的是conf/authz.conf、passwd.conf、svnserve.conf

authz [groups] admin=nys,test //用户组=用户

[/] //项目根目录 @admin=rw //admin组有r=读 w=写权限 passwd [users]

harry = harryssecret

sally = sallyssecret

nys=nys test=test 用户名=密码 svnserve.conf 取消下列注释 anon-access=none auth-access=write password-db=passwd authz-db=authz 以上配置文件中,左侧一定不要有空格,不然会出错。

配置完成以后运行或重启subversion: svnserve -d -r /data/.svnrepos/ /usr/local/svn/bin/svnserve -d --listen-port 3690 -r $SVN_HOME //-d后台运行,--listen-port指定端口,-r直指定svn版本库根目录 Svn客户端下载: https://tortoisesvn.net/downloads.html 使用tortoiseSVN客户端工具访问

安装后,建立文件夹,进入文件夹后,鼠标右键点击: TortoiseSVN-->export 查看详细信息和用户认证 之后进入某文件夹,鼠标右键,点击SVN checkout 显示成功: 新建文件: 鼠标右键SVN update进行更新 鼠标右键SVN commit.. 对服务器文件进行更改或添加

ok 简单的使用就到这里啦 刚开始写可能比较粗糙 如果有不对的地方各位大佬及时指出