什么是 Subversion?
Subversion 是一个 免费/开源 的 版本控制系统 (version control system, VCS), 也就是说, Subversion 可以跨越时间地对文件和目录, 以及它们的修改进行管理. 这就允许你恢复 数据的旧版本, 或检查数据的修改历史. 由于这个特点, 很多人把版本控制系统 看成是一种 “数据时间机器”.
Subversion 可以跨越网络进行操作, 这就允许多个用户在不同的机器上工作. 从某种程度上讲, 允许用户在各自的空间里修改和管理同一组数据可以促进团队 协作, 因为修改不再是单线进行, 开发速度会更快. 由于所有的工作都被记录在 案, 也就不用担心并行开发会降低软件的质量—如果出现不正确的修改, 只 要撤消那一次更改操作即可.
某些版本控制系统同时也是 软件配置管理 (software configuration management, SCM) 系统. 这种系统经过精巧的设计, 专门用于管理源代码树, 具备许多与软件开发有关的 特性—理解编程语言, 提供了程序构建工具. 但 Subversion 不是 SCM, 它是一个通用系统, 可以管理 任意 类型的文件集合. 对你来说, 这些文件可能是源代码文件—对别人来说, 可能是一个货物清单 或数字电影.
Subversion的运行和数据存储
SVN(subversion)的运行方式有两种:
一种是基于Apache的http、https网页访问形式;
还有一种是基于svnserve的独立服务器模式。
SVN的数据存储方式也有两种
- Berkeley DB数据库中存储数据;
- 使用普通的文件FSFS存储数据。
由于Berkeley DB方式在使用中有可能锁住数据,一般建议使用FSFS方式更安全。
Subversion的架构
图中的一端是存放所有版本数据的 Subversion 仓库, 另一端是 Subversion 客户端程序, 客户端程序管理着部分版本数据在本地的映射. 两端之间是穿过仓库访问 (Repository Access) 层的多条访问路径, 其中 一些路径跨越计算机网络, 通过网络服务器对仓库进行访问, 其他一些路径 则不经过网络, 直接访问仓库.
Subversion 的组件
安装好的 Subversion 由好几个组件构成, 下面将简单地介绍 一下这些组件:
svn
客户端命令行工具
svnversion
用于报告工作副本状态 (就项目的版本号而言) 的工具
svnlook
可以直接检查仓库的工具
svnadmin
用于创建, 调整或修复 Subversion 仓库的工具
mod_dav_svn
Apache HTTP 服务器插件, 该插件允许用户通过网络访问仓库
svnserve
一个定制的, 可独立运行的服务器程序, 可以以守护进程方式运行, 也可以被 SSH 调用, 这是另一种允许用户通过网络访问仓库的方法
svndumpfilter
过滤 Subversion 仓库转储数据流的程序
svnsync
可以跨越网络对仓库进行增量镜像备份的程序
svnrdump
可以跨越网络对仓库历史进行转储和加载的程序
svnmucc
该工具支持在没有工作副本的情况下, 在一个单独的提交中对多个 仓库执行基于 URL 的操作
本文将以svnserve的独立服务器模式,使用FSFS数据存储方式源码编译安装配置SVN服务器
系统环境:
rhel7.2 x86_64bit
SELinux关闭
防火墙关闭(或者开启防火墙端口,基于svnserve的独立服务器模式,默认端口为3690)
开启防火墙端口的命令如下:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT