svn服务实战应用指南

1.1     svn介绍

什么是svn?

svn(sub-version)是近年来崛起的非常优秀的版本管理工具,与cvs管理工具一样,svn是一个跨平台的开源的版本控制系统,svn版本管理工具管理者随时间改变的各种数据

这些数据放置在一个中央资料档案库中,这个档案库很像一个普通的文件服务器或者ftp服务器,但是,与众不同的是,svn会备份并记录每个文件每一次的修改更新变动,这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本(回滚),当然也可以直接浏览制定文件的更新历史记录

为什么会有svn这样的一个项目

官方解释:为了接管cvs的用户基础

svn是一个非常通用的软件系统,它常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本,视频,图片等等

svn相关站点:

http://www.iusesvn.com/  svn中文网站

http://tortoisesvn.net    svn客户端

svn 集中式版本控制系统

svn版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也都必须提交到这个中央版本库

svn版本控制系统工作流程如下:

  1. 在中央库上创建或从主干复制一个分支
  2. 从中央库 check out下这个分支的代码
  3. 增加几的代码文件,修改现存的代码或删除代码文件
  4. commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先up你的代码后再提交,up代码的时候如果出现冲突,需要解决好冲突后再进行提交

缺点:

当无法连接到中央版本的环境下,你无法提交代码,将代码加入版本控制,你无法看到代码的历史版本以及版本的变化过程,提交到版本控制系统中的代码我们都默认通过自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现

为可测的功能,那么你需要等很长的时间才能提交自己的代码,由于代码集中管理,因此,需要对中央版本库的存储做备份,这点分布式的版本控制系统要好一些,svn的备份要备份所有代码数据以及所有更改的版本记录

企业应用场景

svn仍是当前企业的主流,运维人员需要掌握的技术点:

运维人员掌握版本管理

1)     安装、部署、维护、排障

2)     简单使用,很多公司都由开发来管理,包括建立仓库和添加和删除账号

3)     对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的

svn服务端运行方式3种

  1. 独立服务器访问 例如:svn://svn.hdxy.org/sadoc
  2. 借助apache等http服务 例如: http://svn.hdxy.org/sadoc
    1. 单独安装apache+svn
    2. Csvn(apache + svn)是一个单独的整合软件,带web界面管理的svn软件
  3. 本地直接访问  例如  file://application/svndata/sadoc

svn客户端的访问方式

访问方式

说明

file://

直接通过本地磁盘访问

http://

通过webdav协议访问

svn://

通过tcp/ip自定义协议访问

svn+ssh

通过认证并加密的方式

Svn档案库数据格式:

Svn存储版本数据有2种方式:BDB(一种事物安全型表类型)和FSFS(一种不需要数据库的存储系统),因为BDB方式在服务器中断时,有可能锁住数据,所以还是fsfs方式更安全一点

BDB 是1.2版本以前的默认数据格式

FSFs是1.2版本之后的默认数据格式

Svn是基于关系数据库或一系列二进制文件的,一方面解决了许多问题(例如:并行读写共享文件)以及添加了许多新功能(例如:运行时的事物特性)然而另一方面,数据存储由此变得不透明,不能像ftp,nfs等能看到实体文件了

Svn 版本系统逻辑架构图原理图

客户端----[http|svn|local] ------svnserver接口------svn版本库-------后台管理[bdb|fsfs]

略。。。

集中式代码管理的核心是svn服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后进行开发,最后解决冲突、提交所有的版本信息都放在svn服务器上,因此如果脱离了服务器,开发者就无法进行提交代码工作

开发者利用svn版本管理系统工作流程:

开始新的一天的工作:

  1. 首先从svn服务器下载项目组新代码
  2. 进入自己的分支,进行开发工作,每隔一个小时向服务器向服务器上自己的分支提交一次代码(很多程序员都有这个习惯)
  3. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器

缺点:

  1. 由于每一次提交都保留一个原始副本,因此svn数据库容量会暴增
  2. 如果不能连接到svn服务器上,基本上不可以工作
  3. 不适合开源系统开发(开发人数非常多)

优点:

  1. 管理方便,逻辑清晰,符合一般人的逻辑习惯
  2. 易于管理,集中式svn服务器更能保证数据安全性
  3. 代码一致性非常高
  4. 适合开发人数不多的项目开发
  5. 普及度高,大部分软件配置管理的大学教材都是使用svn

2.1 安装配置svn服务

准备操作系统并查看系统环境

Centos6.6 64位系统

内核 2.6.32

安装svn

到底是编译安装还是yum安装?

编译,yum or rpm

一般,辅助性的软件用yum安装,重量级的软件用编译

首先yum安装

[root@hd3 ~]# yum -y install subversion

注意:yum安装rpm包安装后本地不清除的方法

[root@hd3 ~]# sed -i "s#keepcache=0#keepcache=1#g" /etc/yum.conf

[root@hd3 ~]# grep  keepcache /etc/yum.conf

keepcache=1

2.1.3 配置并启动svn

建立svn版本系统数据存储根目录

mkdir –p /application/svndata

mkdir –p /application/svnpasswd

启动svn服务并指定服务的svn根目录

svnserve –d –r /application/svndata/

-d --daemon 表示以守护进程(后台方式,一直运行)的方式启动程序

-r 表示指定数据存储的目录

检查查看进程

ps –ef |grep svn

查看端口

netstat –lntup|grep 3690

lsof –i :3690

2.1.4 建立项目版本库

创建一个新的subversion 项目 sadoc ,其实,类似sadoc这样的项目可以创建多个,每个项目都是独立的

svnadmin help 查看创建项目的帮助

svnadmin help create 表示创建新项目的帮助信息

例如:

svnadmin create /application/svndata/sadoc

表示创建一个新的项目sadoc(版本库)

tree /application/svndata/sadoc

表示查看sadoc项目中的内容

2.15 调整svn配置文件及权限提升

配置允许用户

cd /application/svndata/sadoc/conf

authz 权限管理文件

passwd 用户和密码配置文件

svnserve.conf 配置文件

下面编辑配置文件

vi svnserve.conf 修改 注意要顶格写

12 anon-access = none

13 auth-access = write

20 password-db = /application/svnpasswd/passwd

27 authz-db = /application/svnpasswd/authz

利用diff比较源文件和修改之后文件

将模版文件拷贝到相关目录下

cp passwd authz  /application/svnpasswd/

修改权限

cd /application/svnpasswd/

chmod  700 *

vi passwd 添加账号

[users]

zhangsan = 123456

gongli = gongli

提示:

等号前是用户名,等号后面是svn密码

更改svnserve.conf时,需要重启svn服务,其他文件不用

authz 权限的配置文件

格式说明:

用户组格式:

[groups]

= ,

其中1个用户组可以包含1个或多个用户,用户中间以逗号分隔。

版本库目录格式:

[版本库:/项目/项目]

@用户名 = 权限   #表示设置组的权限

用户名 = 权限     #单个用户的权限设置

/ ,表示根目录及以下,我们指定为/application/svndata就是表示对全部版本库设置权限

[repos:/] 表示对版本库repos设置权限

[repos:/sadoc]表示对版本库中的sadoc项目设置权限

[repos:/sadoc/oldboy]表示对版本库repos中的sadoc项目的oldboy目录设置权限

权限可以是w ,r,wr和空,空表示没有任何权限

authz中每个参数都要顶格写

案例:

vi authz  修改配置文件

sagroup = zhangsan,gongli

[sadoc:/]

zhangsan = rw

gongli = r

@sagroup = r

注意:权限文件里的用户必须在passwd中定义

重启svn

reload 服务中 重新加载配置文件

pkill svnserve,

svnserve –d –r /application/svndata/

ps –ef|grep svn

客户端软件TORTOISE SVN

svn 客户端连接服务器的方式,账号及密码

svn://192.168.1.13/sadoc

用户名:zhangsan

密码: 123456

安装完svn客户端之后,在本地创建一个目录svndata,鼠标点击右键 选择 svn check out  之后出现一个窗口,调整一下访问地址,以及本地的目录路径,点击ok,输入用户名和密码

点击确定 就ok了

1 checkout下载svn服务器上的资源

2 输入正确的svn服务器的路径

3.输入账号和密码

4.提交修改后的代码文档

把一个代码文件放在创建的目录里svndata ,然后选择右键 svn commit 进行提交

如果想查看到底服务器上有没有更新,怎么办 ?

右键 选择 tortoiseSVN -----》repo-browser

到此svn部署成功了 !

定期下载

当svn有内容的时候,第二次更新的时候,变成svn update

>>定期上传 svn内容

紫色:提交一个新增项

蓝色:提交一个修改

深红:提交一个删除或替换

黑色:其他

>>删除svn的内容

在本地删除文档,然后点击svn commit 将服务器上的文档也删除

>>查看svn目录或者历史版本

点击右键tortoiseSVN  -----》show log

linux作为svn 客户端命令的使用

1.  将文件checkput 到本地目录(从svn库提取数据到本地)

例如:

在本地创建一个目录 /data

svn co svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456

说明:co表示下载 checkout的缩写

和windows客户端一样 第二次下载就是update了

[root@hd3 ~]# svn up svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456

如果出现不支持utf-8说明 linux客户端的字符集有问题

解决方法:

调整字符集

export LC_CTYPE=’en_US.UTF-8’

export LC_ALL=

调整secure-crt的编码

>> 查看svn库中的数据

[root@hd3 sadoc]# svn list svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456 --verbose

9 zhangsan              Mar 07 19:20 ./

5 zhangsan          164 Mar 07  2015 clone.sh

Linux作客户端

>> 从本地提交数据到svn服务器

cd /data #进入本地svn目录

touch a b c # 创建abc三个文件

svn add a b c  #定义需要提交的文档

svn ci –m “svn ci data” #提交数据ci表示提交 –m表示解释说明

2.1 svn 钩子脚本简介

钩子脚本的具体写法就是操作系统中shell脚本程序的写法,可根据自己的svn所在的操作系统和shell程序进行相应的开发

钩子脚本就是被某些版本库事件触发的程序,例如:创建新版本或者修改未被版本控制的属性,每个钩子都能掌管足够多的信息来了解发生了什么事件,操作对象是什么,以及触发事件用户的账号。

根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起

默认情况下,钩子的子目录中包含各种版本库钩子模版

cd /application/svndata/sadoc/hooks

要使用一个钩子,去掉模版的扩展名

重要提示:

钩子脚本,手动执行可以,但是放在subservision 中却不能执行,原因是没有设置钩子的路径或环境变量

svn版本系统中钩子种类及功能介绍

钩子脚本

说明

post-commit

在提交完成成功建立版本之后执行该钩子,提交已经完成,不可更改因此,本脚本的返回值被忽略,提交完成时触发事武

pre-commit

提交完成前触发该脚本

2.2 钩子生产应用场景举例

pre-commit

  1. 限制上传文件扩展名及大小,控制提交要输入的信息等。

post-commit

  1. svn更新自动周知,msn,邮件或者短信通知
  2. svn更新触发checkout程序,然后实时rsync推送到服务器

2.3 svn钩子生产应用实战

2.3.1 rsync 与svn钩子结合实现数据实时同步企业案例

需求:svn数据一更新,就要同步到/data/www目录

1.建立同步web站点 /data/www

2.svn co svn://10.0.0.17/sadoc  /data/www –username=zhangsan –password=123456

3. cp post-commit.tmpl  post-commit

4. 修改post-commit 脚本文件内容如下

logpath=’/app/log’

[ ! –d ${logpath} ] && mkdir ${logpath} –p

SVN=/usr/bin/svn

$SVN update –username zhangsan –password  /data/www

if [ $? –eq  ]

then

/usr/bin/rsync –az –delete /data/www  /tmp/

fi

注意:1)钩子脚本的权限chmod 755 ,2)脚本内容中的命令尽量是绝对路径

企业案例逻辑图

开发人员------》svn服务器-------》推送给web服务器(极简版图)

利用pre-commit限制扩展名或者大小

svn服务的更多相关文章

  1. linux svn 服务端搭建

    环境是centos6.x. 关于团队对代码管理,相信大部分人习惯于svn.不过我个人比较喜欢git的.这个blog git 常用命令 就是介绍git的基本用法.现部署svn服务端方式如下: 1. 用y ...

  2. SVN 服务启动报错 0x8007042a

    服务器环境:Windows Server 2008 R2 企业版,Visual SVNServer 2.6.5 不能签出代码,发现svn服务关闭,手动启动报错: 事件查看器: Error: no li ...

  3. Linux下安装SVN服务端小白教程

    安装 使用yum安装非常简单: yum install subversion 配置 创建仓库 我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面,创建成 ...

  4. svn服务端和eclipse配合使用

    今天弄了个svn服务器来做项目的版本控制,讲讲我做的步骤吧 1.安装svn服务端 2.下载subclipse插件 3.将subclipse插件安装到eclipse上,点击Install New Sof ...

  5. svn服务配置和日常维护命令

    Subversion独立服务和与apache整合服务. 一 .Svn独立服务安装 操作系统: Redhat Linux AS3  AS 4   ContOS AS 4 安装包获取: 下载[url]ht ...

  6. SVN服务端启动解决方案(2013-12-10 记)

     解决每一次开机都得用DOS启动SVN服务,而DOS窗口又无法关闭的情况 1.安装Setup-Subversion-1.8.5.msi搭建好SVN服务端(下载地址:http://subversion. ...

  7. linux shell脚本守护进程监控svn服务

    最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...

  8. Linux下搭建SVN服务

    SVN有几种方式进行访问,比较常见的是通过自带协议访问(svn://),配置很简单,还有一种就是http协议访问,需要结合apache服务,配置相对繁琐. 安装svn yum -y install s ...

  9. svn服务端配置

    1.建立版本库 创建一个新的Subversion项目svnadmin create /var/www/svndata/njlrxx 配置允许用户jiqing访问cd /var/www/svndata/ ...

  10. Ubuntu Server搭建svn服务以及迁移方法【转】

    转自:http://www.linuxidc.com/Linux/2013-05/84693.htm Ubuntu Server搭建svn服务以及迁移方法 采用apache+svn,http访问方式. ...

随机推荐

  1. bzoj 4975: [Lydsy1708月赛]区间翻转【博弈论】

    必败状态是倒序排列,也就是正序对为0 然后发现,每次翻转都是有奇数个数对(\( C_{4x+2}^{2} C_{4x+3}^{2} \) 都是奇数),所以每次翻转丢回改变正反数对的奇偶性 又因为偶数为 ...

  2. 关于long long int和__int64用%I64d和%lld输出在不同编译语言下的正确性

    http://blog.csdn.net/febr2/article/details/52068357 这个网址最下面

  3. ssh密钥的分发之一:ssh-copy-id

    ssh密钥的分发 我们在使用客户端账号对主机记性管理的时候,可以分为以下两种情况: .第一种情况,直接使用root账号: 优点:使用root账号密钥分发简单,指令执行简单 缺点:不安全 .第二种情况, ...

  4. Codeforces 1108F(克鲁斯卡尔的理解)

    最小生成树会多样的情况是:两个或多个边等长且连通同样的两个并查集块. 所以可以跑一遍克鲁斯卡尔,每次把当前等长的边数出来,注意不要边找边并查,因为有一部分边是正常跑生成树我们也不会要他的,这种直接跳了 ...

  5. 剪花布条 HDU - 2087

    剪花布条 HDU - 2087 要求各个匹配出来的子串不重叠的kmp.实际上直接贪心从前往后找,每找到一个就把当前j标为0即可.(一般kmp是标为f[j]) #include<cstdio> ...

  6. Ilya And The Tree CodeForces - 842C

    ((半个)智商题,主要难度在于实现) 题意:有一棵n个结点组成的树,其根是编号为1的结点.对于每一个结点,生成从根结点走到这个结点的路径(包括自身),选择路径上的一个点或者不选择任何点,使得其它点的最 ...

  7. 递推DP HDOJ 5092 Seam Carving

    题目传送门 /* 题意:从上到下,找最短路径,并输出路径 DP:类似数塔问题,上一行的三个方向更新dp,路径输出是关键 */ #include <cstdio> #include < ...

  8. LCA最近公共祖先知识点整理

    题解报告:hdu 2586 How far away ? Problem Description There are n houses in the village and some bidirect ...

  9. ORA-12162

    2.故障原因 诡异的故障背后的原因竟然是那样的基础:ORACLE_SID没有指定!确认系统当前的ORACLE_HOME和ORACLE_SID环境变量 [oracle@asdlabdb01 ~]$ ec ...

  10. c#学习系列之关键字where

    where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量.    1.接口约束.         例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就 ...