svn服务
Posted xh-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了svn服务相关的知识,希望对你有一定的参考价值。
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版本控制系统工作流程如下:
- 在中央库上创建或从主干复制一个分支
- 从中央库 check out下这个分支的代码
- 增加几的代码文件,修改现存的代码或删除代码文件
- commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先up你的代码后再提交,up代码的时候如果出现冲突,需要解决好冲突后再进行提交
缺点:
当无法连接到中央版本的环境下,你无法提交代码,将代码加入版本控制,你无法看到代码的历史版本以及版本的变化过程,提交到版本控制系统中的代码我们都默认通过自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现
为可测的功能,那么你需要等很长的时间才能提交自己的代码,由于代码集中管理,因此,需要对中央版本库的存储做备份,这点分布式的版本控制系统要好一些,svn的备份要备份所有代码数据以及所有更改的版本记录
企业应用场景
svn仍是当前企业的主流,运维人员需要掌握的技术点:
运维人员掌握版本管理
1) 安装、部署、维护、排障
2) 简单使用,很多公司都由开发来管理,包括建立仓库和添加和删除账号
3) 对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的
svn服务端运行方式3种
- 独立服务器访问 例如:svn://svn.hdxy.org/sadoc
- 借助apache等http服务 例如: http://svn.hdxy.org/sadoc
- 单独安装apache+svn
- Csvn(apache + svn)是一个单独的整合软件,带web界面管理的svn软件
- 本地直接访问 例如 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版本管理系统工作流程:
开始新的一天的工作:
- 首先从svn服务器下载项目组新代码
- 进入自己的分支,进行开发工作,每隔一个小时向服务器向服务器上自己的分支提交一次代码(很多程序员都有这个习惯)
- 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器
缺点:
- 由于每一次提交都保留一个原始副本,因此svn数据库容量会暴增
- 如果不能连接到svn服务器上,基本上不可以工作
- 不适合开源系统开发(开发人数非常多)
优点:
- 管理方便,逻辑清晰,符合一般人的逻辑习惯
- 易于管理,集中式svn服务器更能保证数据安全性
- 代码一致性非常高
- 适合开发人数不多的项目开发
- 普及度高,大部分软件配置管理的大学教材都是使用svn
2.1 安装配置svn服务
准备操作系统并查看系统环境
Centos6.6 64位系统
内核 2.6.32
安装svn
到底是编译安装还是yum安装?
编译,yum or rpm
一般,辅助性的软件用yum安装,重量级的软件用编译
首先yum安装
[[email protected] ~]# yum -y install subversion
注意:yum安装rpm包安装后本地不清除的方法
[[email protected] ~]# sed -i "s#keepcache=0#keepcache=1#g" /etc/yum.conf
[[email protected] ~]# 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了
[[email protected] ~]# 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库中的数据
[[email protected] 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
- 限制上传文件扩展名及大小,控制提交要输入的信息等。
post-commit
- svn更新自动周知,msn,邮件或者短信通知
- 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 123456 /data/www if [ $? –eq 0 ] then /usr/bin/rsync –az –delete /data/www /tmp/ fi
注意:1)钩子脚本的权限chmod 755 ,2)脚本内容中的命令尽量是绝对路径
企业案例逻辑图
开发人员------》svn服务器-------》推送给web服务器(极简版图)
利用pre-commit限制扩展名或者大小
以上是关于svn服务的主要内容,如果未能解决你的问题,请参考以下文章
svn 的重新定位之后,本地代码会被新服务器上面的代码覆盖吗
CentOS yum 命令出现 [Errno 14] curl#6 - "Couldn't resolve host ..." 的解决方法(代码片段