SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
部署安装SVN
service IPtables stop
setenforce 0
1. 安装SVN服务器:
[root@localhost repositories]# cat /etc/issue
CentOS release 6.9 (Final)
安装SVN服务器
yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql
验证安装
查看版本
svnserve --version
2. 代码库创建:
安装完成后要建立SVN库
执行后,自动建立repositories库,查看/mnt/svn/repositories文件夹包含了conf,db,format,hooks,locks,README.txt等文件,说明一个SVN库已经建立。
3. 配置版本库:
进入上面conf文件夹下,进行配置:
a. 用户密码passwd配置:
vi passwd
[users]
# harry = harryssecret
# sally = sallyssecret
fanhaitao = longtel.com
b. 权限控制authz配置:
vi authz
注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。
c. 服务svnserve.con配置:
vi svnserve.conf
[general]
anon-access = read 匿名访问的权限,可以是read,write,none,默认为read
auth-access = write 使授权用户有写权限
password-db = passwd 密码数据库的路径
authz-db = authz 访问控制文件
realm=/mnt/svn/repositories 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
4. 查看:
a. 启动SVN
svnserve -d -r /mnt/svn/repositories
svnserve -d -r /mnt/svn/
b. 查看SVN进程
[root@localhost conf]# ps -ef|grep svn|grep -v grep
root 3129 1 0 14:59 ? 00:00:00 svnserve -d -r /mnt/svn
c. 检测SVN端口
[root@localhost conf]# netstat -ln |grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
5. 停止重启SVN:
killall svnserve //停止
svnserve -d -r /opt/svn/repositories // 启动
6. 测试连接:
使用TortoiseSVN进行测试:
去https://tortoisesvn.net/downloads.html官网下载适合自己的客户端安装包和中文包
安装完成之后
在windows上桌面新建文件夹,右键文件夹选择SVN检出,如下图
检出成功
因为我之前的库里有两个文件,aa和bb,所以此时新建文件里里就有这两个文件了
可以在现在的新建文件夹里再写一个文件cc,然后把它提交到库里,如下
这个时候库里就有三个文件 了
此时把新建的文件夹删除掉,再新建一个文件夹
对新建的文件夹依然右键,svn检出,这是可以看到新建文件夹里有三个文件aa,bb,cc
此 时SVN搭建完毕。估计有好多朋友会问,上传的文件怎么在服务器上看呢?下面解释
SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另一方面,数据存储由此变得不透明。
SVN服务器端不是简单将上传的文件一个一个存放起来的;
SVN服务器端默认采用的FSFS格式是将每次commit的内容增量方式存放的,每个增量包存成1个文件,这个增量包中包括了这次commit的全部数据。
也就是说你不可能在服务器端存放该版本库的文件夹下找到你上传的某个文件。
SVN服务器版本库有两种格式,
一种为FSFS,
一种为BDB
把文件上传到SVN版本库后,上传的文件不再以文件原来的格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库中。
如果是FSFS格式,这些数据存放在版本库的db目录中,里面的revs和revprops分别存放着每次提交的差异数据和日志等信息 。
怎把指定文件夹上传到SVN服务器?
一般来说新建项目是在服务器端操作的,每个项目作为一个独立的版本库进行管理。
当然你可以可以把这个项目当作服务器上某个版本库下面的一个文件夹进行管理,但是会导致这个项目的版本号看起来是不连续的,因为SVN是用版本号标注整个版本库的状态。
你如果确定想把这个项目当成某个版本库的一个文件夹进行管理的话,那么就这么做:
首先,用TSVN检出那个版本库到本地;
然后,将这个项目复制到本地这个版本库的某个文件夹下面;
最后,用TSVN增加并提交这个文件夹。
SVN在服务器端的存储方式和客户端是不一样的,所以在服务器端是看不到源文件的。服务器端有两种存储方式FSFS和BDB,目前默认都是FSFS。
要导入文件有两种做法:
1、用import指令,将客户端文件夹导入到服务器端
2、先checkout空库到客户端,然后将要导入的文件夹放入客户端checkout产生的空文件夹,然后执行add将这些文件夹纳入SVN控制,最后执行commit上传到服务器