一、什么是SVN(Subversion)
svn是一个跨平台的开源版本控制系统,Subversion管理着随时间改变的数据,这些数据放置在一个中央资料档案库(repository).这个档案库很像一个普通文件服务器,不过它会记住每一次文件的变动,这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史
svn是一个通用软件系统,它不但可以用来管理程序源码,也可以管理任何类型的文件,如文本,视频,图片
svn的服务器常见有3种运行访问方式
1、独立服务器(例如:svn://svn.etian.org/sadoc);
2、借助apache(例如:http://svn.etian.org/sadoc);
3、本地直接访问(例如:file://svn.etian.org/sadoc)
客户端访问方式
Subversion可以通过多种方式访问--本地磁盘访问,或各种各样不同的网络协议,但一个版本库的地址永远都是一个URL,URL方案反映了访问方法
file://直接版本访问(本地磁盘或者网络磁盘)
http://通过WebDAV协议访问支持Subversion的Apache服务器
https://与http://相似,但是用的SSL加密
svn://通过未认证的TCP/IP自定义协议访问svnserver服务器
svn+ssh://通过认证并加密的TCP/IP自定义协议访问svnserver服务器
SVN数据格式
Subversion存储版本数据方式2种:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点;那么在创建Subversion版本控制仓库的时候,可以指定存储版本数据为FSFS方式;
集中式代码管理的核心是服务器,所有开发者在开始新一天工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交,所有版本信息都放在服务器。如果脱离了服务器,开发者就无法工作
下面举例说明
开始新的一天说明
1、从服务器下载项目组最新代码
2、进入自己的分支,进行工作,每隔一小时向服务器上自己的分支持提交一次代码(很多人都有这个习惯。因为有时候自己对自己代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器的主分支上,一天的工作完成,并反映给服务器
这就是经典的svn工作流程,从流程上看,有缺点,也有优点
缺点:
1、服务器压太大,svn数据库容量暴增
2、如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等
3、不适合开源开发(开发人数非常非常多,但是Google app engine就是用SVN的)。但一般集中式管理的有非常明确权限管理机制(例如分支访问限制),可以实现分层管理,从而很好解决开发人数众多问题
优点:
1、管理方便,逻辑明确,符合一般人思维习惯
2、易于管理,集中式服务器更能保证安全性
3、代码一致性非常高
4、适合开发人数不多的项目开发
5、大部分软件配置的大学教材都是使用svn和vss
二、SVN逻辑架构(借了一张图)
三、安装与配置
1、服务器资源列表
服务器名称 | 系统 | CPU架构 | 内核 | IP地址 | 角色 |
svn.abc.com | CentOS release 6.5 | x86_64 | 2.6.32-431.el6.x86_64 | 192.168.1.220 | SVN服务器 |
2、安装
2.1 yum安装
[root@svn ~]# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf[root@svn ~]# yum install -y install subversion[root@svn ~]# find / -name subversion-1.6.11-12.el6_6.x86_64.rpm/var/cache/yum/x86_64/6/updates/packages/subversion-1.6.11-12.el6_6.x86_64.rpm
2.2检查是否已经安装
[root@localhost ~]# rpm -qa subversionsubversion-1.6.11-12.el6_6.x86_64
2.3创建svn版本根目录(svndata)及密码权限目录
[root@svn ~]# mkdir -pv /application/svndatamkdir: 已创建目录 "/application"mkdir: 已创建目录 "/application/svndata"You have new mail in /var/spool/mail/root
[root@svn ~]# tree /application//application/├── svndata└── svnpasswd
2.4启动
[root@svn ~]# svnserve -d -r /application/svndata
查看进程和端口
[root@svn ~]# ps -ef |grep svn | grep -v greproot 2277 1 0 16:36 ? 00:00:00 svnserve -d -r /application/svndata/[root@svn ~]# netstat -lntup | grep 3690tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2277/svnserve
[root@svn ~]# lsof -i tcp:3690COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsvnserve 2277 root 3u IPv4 32429 0t0 TCP *:svn (LISTEN)
2.5建立版本库
创建一个新Subversion项目sadoc,其实,项目可以创建多个
[root@svn ~]# svnadmin create /application/svndata/sadoc[root@svn ~]# ls -ld /application/svndata/sadoc/drwxr-xr-x 6 root root 4096 6月 15 16:42 /application/svndata/sadoc/
查看帮助
[root@svn ~]# svnadmin create help[root@svn ~]# svnadmin help create
2.6修改配置文件
[root@svn conf]# cp /application/svndata/sadoc/conf/svnserve.conf svnserve.conf.bak
[root@svn conf]# egrep "\-access|\-db = " svnserve.conf# anon-access = read# auth-access = write# password-db = passwd# authz-db = authz
[root@svn conf]# sed -i 's/# anon-access = read/anon-access = none/' svnserve.conf[root@svn conf]# sed -i 's/# auth-access = write/auth-access = wirte/' svnserve.conf[root@svn conf]# sed -i 's/# password-db = passwd/password-db = /application/svnpasswd/passwd/' svnserve.conf[root@svn conf]# sed -i 's/# authz-db = authz/password-db = /application/svnpasswd/authz' svnserve.conf
把密码认证文件模板拷到相关目录(随意的)
[root@svn conf]# pwd/application/svndata/sadoc/conf[root@svn conf]# cp authz passwd /application/svnpasswd/
改权限
[root@svn svnpasswd]# ll总用量 8-rw-r--r-- 1 root root 1080 6月 15 17:17 authz-rw-r--r-- 1 root root 309 6月 15 17:17 passwd
[root@svn svnpasswd]# chmod 700 *[root@svn svnpasswd]# ll总用量 8-rwx------ 1 root root 1080 6月 15 17:17 authz-rwx------ 1 root root 309 6月 15 17:17 passwd
[root@svn svnpasswd]# pwd/application/svnpasswd
2.7 用户账号及密码定义在passwd配置
[root@svn svnpasswd]# vim passwd [users]# harry = harryssecret# sally = sallyssecretqingyun = 168tom = 168jerry = 168
2.8 authz配置
用户组格式,其中1个用户组可以包含1个或多个用户,用户间用,隔开
[groups]
=,
[<项目库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
[/]表示根目录 及以下,根目录是svnserve启动时指定的,
我们指定为/application/svndata,[/]就是表示全部版库设置权限
[repos:/]表示版本库repos设置权限
[repos:/sadoc]表示版本库repos中的sadoc项目设置权限
[repos:/sadoc/qingyun]表示版本库对repos中的sadoc项目的qingyun目录设置权限
权限主体可以是用户组,用户或*,用户组在前面加@,*表示全部用户
权限可以是w,r,wr和空,空表示没有任何权限
authz中每个参数都要顶格写,开头不能空格
对于组,要以@开头,用户不需要@开头
[root@svn svnpasswd]# vim authz [groups]# harry_and_sally = harry,sally# harry_sally_and_joe = harry,sally,&joe# [/foo/bar]# harry = rw# &joe = r# * =# [repository:/baz/fuz]# @harry_and_sally = rw# * = rett_sa = qingyun,tomett_wangguan = jerry[sadoc:/]@ett_sa = rw@ett_wangguan = r
2.9
重启svn命令
[root@svn svnpasswd]# pkill svnserve[root@svn svnpasswd]# ps -ef | grep svnservroot 2628 1871 0 17:51 pts/1 00:00:00 grep svnserv[root@svn svnpasswd]# svnserve -d -r /application/svndata/[root@svn svnpasswd]# netstat -tlunp | grep svntcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2630/svnserve
四、客户端安装与测广东
1、下载连接
2、安装TortoiseSVN