subversion 系统学习笔记

多年来,并发版本系统(CVS)一直是在Linux上管理代码或者文本的标准。作为基于RCS上建立但却允许多用户协作的系统而言,CVS记录所有文件的修改信息。这对于程序开发者、网络设计者和系统管理员而言,是非常有用的。
然而,CVS逐渐显示出它的衰老,出现了相似的源代码管理软件。然而大多这种东西都是以牟利为主要目的的。
Subversion就是一种相对新鲜的源代码管理系统。虽然事实上它还在不断的反展之中,但是Subversion已经是一个非常稳定而且成熟的产品。它是一个全新的系统,其功能可以和CVS媲美,同时,它要比CVS更直观,更容易操作。本文就Subversion的安装和一些特殊功能作一个介绍。
安装服务器端
第一步:下载Apache和SVN源码包
从官方网站台下载httpd-2.0.52.tar.gz,subversion-1.2.3.tar.gz
(因为redhat 9默认安装的Apache没有并包含--enable-so选项,所以无法产生mod_dav_svn.没有这个模块,SVN就无法采用http方式运行,所以必须重新编译新的Apache)
以root身份执行:
#tar zxvf httpd-2.2.0.tar.gz
#cd httpd-2.2.0
#./configure --enable-dav --enable-so --enable-maintainer-mode
#make
#make install
此时会产生/usr/local/apache2目录,接着执行:
#tar zxvf subversion-1.2.3.tar.gz
#./configure --with-apxs=/usr/local/apache2/bin/apxs
# rm /usr/local/lib/libsvn*
# make clean && make && make install
此时会自动在/usr/local/apache2/conf/httpd.conf添加
LoadModule dav_svn_module modules/mod_dav_svn.so
安装完成后,运行svnserver --version确认版本号1.2.3。
SVN服务器安装结束.

第二步,创建仓库 svnadmin create /home/mysvn
/home/mysvn为所创建仓库的路径,理论上可以是任何目录

第三步,修改配置文件/home/mysvn/conf/svnserve.conf
代码
#去掉#[general]前面的#号
[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access = none
#认证用户的权限,可以是read,write,none,默认为write
auth-access = write
#密码数据库的路径,去掉前面的#
password-db = passwd

注意:所有的行都必须顶格,否则报错。
建议:为了防止不必要的错误,建议你直接用我上面的内容覆盖掉文件原来的内容

第四步,修改配置文件passwd。
代码
[users]
sxy = sxy

注意
1. 一定要去掉[users]前面的#,否则svn只能以匿名用户登录,客户端不会出现登录窗口,除非你的anon不为none,否则将返回一个错误。
2. 这里的密码都是没有加密的,我按照一些教程所说的用htpasswd生成的密码无法使用。
#zxw add  
应加一步:
修改配置文件authz
add:
[/]
sxy = rw     
用户sxy有读写权限

第五步,启动svn服务
对于单个代码仓库
启动命令 svnserve -d -r /home/mysvn --listen-host 192.168.1.200

其中-d表示在后台运行,-r指定服务器的根目录,这样访问服务器时就可以直接用svn://服务器ip来访问了。如果服务器有多ip的话--listen-host来指定监听的ip地址.
我们可以在svn客户端中通过svn://192.168.1.200来访问svn服务器
对于多个代码仓库,我们在启动时也可以用-r选项来指定服务器根目录,但访问时需要写上每个仓库相对于svn根目录的相对路径.
比如,我们有两个代码仓库/home/mysvna和/home/mysvnb,我们用svnserve -d -r /home --listen-host 192.168.1.200来启动,那么在客户端访问时可以用svn://192.168.1.200/repoa和svn://192.168.1.200/repob来分别访问两个项目
启动完成以后,我们可以用ps aux|grep svnserv来查看是否存在svnserve进程.
第六步 开放服务器端口
svn默认端口是3690,你需要在防火墙上开放这个端口。
      /sbin/iptables -A INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT
      /sbin/service iptables save
你也可以通过svnserve的--listen-port选项来指定一个已经开放的其他端口,不过这样的话客户端使用也必须家上端口,如svn://192.168.1.200:9999/.

第七步,使用svn客户端导入项目
附:svnserve [选项]
有效选项:
-d [--daemon]            : 后台模式
--listen-port arg        : 监听端口(后台模式)
--listen-host arg        : 监听主机名或IP地址(后台模式)
--foreground             : 在前台运行(调试时有用)
-h [--help]              : 显示这个帮助
--version                : 显示版本信息
-i [--inetd]             : inetd 模式
-r [--root] arg          : 服务根目录
-R [--read-only]         : 不赞成;使用档案库配置文件
-t [--tunnel]            : 隧道模式
--tunnel-user arg        : 隧道用户名(模式是当前用户UID的名字)
-T [--threads]           : 使用线程代替进程
-X [--listen-once]       : 监听一次(调试时有用)
安装客户机端
window客户机:
直接安装TortoiseSVN-1.1.1-UNICODE_svn-1.1.1.msi,方法同一般软件安装相同。
Linux客户机:
方法舆安装服务器相同。
(注意redhat 9默认安装的SVN版本为0.17.1,它的客户端命令svn无法舆新的SVN服务器通讯,必须重新安装)