版本控制(Revision
control)是一种软件工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。版本控制透过文档控制(documentation
control)记录程序各个模组的改动,并为每次改动编上序号。这种方法是维护(maintenance)
of 工程图(engineering drawings)的标准做法, 它伴随着工程图从图的诞生一直到图的定型。
一种简单的版本控制形式,例如,赋给图的初版一个版本等级“A”,当做了第一次改变后,版本等级改为“B”,以此类推等等。
版本控制包括两个方面:确保得到的是最新的版本,记录需求的历史版本。下图是版本控制的工作原理。
|
图1 版本控制工作原理 |
什么是Subversion?
Subversion是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器”。下图是
Subversion的架构
|
图2是 Subversion的架构 |
一端是保存你所有纳入版本控制的数据的Subversion版本库,在另一端是你的Subvesion客户端程序。
安装Subversion服务器
1. 重新安装Apache服务器
RHEL 5默认安装的Apache没有并包含--enable-so选项,所以无法产生mod_dav_svn.没有这个模块,SVN就无法采用http方式运行,所以必须重新编译新的Apache
。
#wget
http://down.itlearner.com/Soft_Down.asp?UrlID=1&P=1&SoftID=2356
#tar zxvf httpd-2.2.3.tar.gz
#cd httpd-2.2.3
#./configure --enable-dav --enable-so
--enable-maintainer-mode
#make
#make install
此时会产生一个/usr/local/apache2系统目录。
2. 安装Subversion
#wget
http://www.iusesvn.com/bbs/download/subversion-1.4.0.tar.gz
# tar zxvf subversion-1.4.0.tar.gz
# cd subversion-1.4.0
# ./configure --prefix=/usr/local/subverion
--with-apxs=/usr/local/apache2/bin/apxs
# make
# make install
说明:--with-apxs指定apxs的安装的目录,可以在安装过程中自动生成两个必要的模块文件mod_dav_svn.so和mod_authz_svn.so以及能够支持它们可以正常地工作。
Subversion安装完成后会生成如表-1组件:
|
表-1 Subversion组件 |
3. 通过svnserver命令检查版本
运行命令:
#svnserver –version
svnserve,版本 1.4.0 (r21228)
编译于 May 16 2007,16:02:18
Copyright (C) 2000-2006 CollabNet.
Subversion is open source software,
see
http://subversion.tigris.org/
This product includes software developed
by CollabNet (http://www.Collab.Net/).
The following repository back-end
(FS) modules are available:
* fs_fs : 模块与纯文本文件(FSFS)档案库一起工作。
另外svnserver命令参数
-d [--daemon]
: 后台模式
--listen-port 参数
: 监听端口(后台模式)
--listen-host 参数
: 监听主机名或IP地址(后台模式)
--foreground
: 在前台运行(调试时有用)
-h [--help]
: 显示这个帮助
--version
: show program version information
-i [--inetd]
: inetd 模式
-r [--root] 参数
: 服务根目录
-R [--read-only]
: force read only, overriding repository config file
-t [--tunnel]
: 隧道模式
--tunnel-user 参数
: 隧道用户名(模式是当前用户UID的名字)
-T [--threads]
: 使用线程代替进程
-X [--listen-once]
: 监听一次(调试时有用)
--pid-file 参数
: write server process ID to file arg
4. 建立Subversion 的数据库
Subversion 的数据库用来存放任意数量项目的受版本控管数据,建立方法很简单
#svnadmin create /svndate
使用Apache 模块方式运行Subversion
Subversion服务器有两种运行方式,一是可以作为Apache
2.x的一个模块,以WebDAV/DeltaV协议与外界连通;另外,也可使用Subversion 自带的小型服务器程序svnserve。该程序使用的是自带的通讯协议,独立运行。
1、检查修改apache配置文件
# vi /usr/local/apache2/conf/httpd.conf
查看是否有下面这两行,一般会自动加入,如果没有则要手工加入
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
将ServerName 修改为ServerName:80
在末尾加上以下参数
<Location /svn>
DAV svndate
SVNPath /mydate
</Location>
2、 通过浏览器测试
在 Subversion的在服务器的浏览器中输入网址:
http://localhost/svn/repository/
如果你看到图-3的界面:
|
图3 Subversion |
这表明服务器已经以apache模块方式正常运行了。
使用suvserver方式运行Subversion
以svnserve这种方式的运行又可以分为两种(standalone和xinted)
1. standalone方式运行Subversion
stand-alone模式工作原理见图4。
|
图4 stand-alone模式工作原理 |
首先打开防火墙的3690端口:
iptables -A INPUT -p tcp -m tcp --sport
3690 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp
--dport 3690 -j ACCEPT
直接运行 #svnserve –d即可启动服务器。
检查服务器运行情况和端口使用情况:
分别使用netstat和ps命令检查服务器运行情况和端口使用情况,图5是进程运行情况。图6是端口情况。
|
图5 查看端口运行情况 |
|
图6 3690端口运行的是SVN服务器 |
2、 xinetd 方式运行Subversion
从守护进程的概念可以看出,对于系统所要通过的每一种服务,都必须运行一个监听某个端口连接所发生的守护进程,这通常意味着资源浪费。为了解决这个问题,Linux引进了“网络守护进程服务程序”的概念。RHEL
5.0的网络守护进程是xinted(eXtended InterNET daemon)。和stand-alone模式相比xinted模式也称
Internet Super-Server(超级服务器)。xinetd能够同时监听多个指定的端口,在接受用户请求时,他能够根据用户请求的端口不同,启动不同的网络服务进程来处理这些用户请求。可以把xinetd看做一个管理启动服务的管理服务器,它决定把一个客户请求交给那个程序处理,然后启动相应的守护进程。xinetd模式工作原理见图6。
|
图7 xinetd工作模式 |
在/etc/xinetd.d/下手工建立一个文件svnserve内容如下
service svnserve
{disable = no
socket_type = stream
protocol = tcp
wait = no
user = apache
server = /usr/local/bin/svnserve
server_args = -i}
下面说明每一行选项的含义。
disable = no:表示启用这个服务。
socket_type = stream:表示服务的数据包类型为stream。
wait = no:表示不需等待,即服务将以多线程的方式运行。
user = apache:表示执行此服务进程的用户是apache。
server =/usr/local/bin/svnserve:启动脚本的位置。
protocol = tcp :服务类型是tcp
编辑 /etc/services 文件加入底下两行:
svnserve 3690/tcp # Subversion svnserve
svnserve 3690/udp # Subversion svnserve
重启xinetd服务即可。
总结:
到此为止RHEL 5.0 下的版本控制服务器Subversion以及设置完成。
|