安装环境:Ubuntu 12.04.2 LTS x86_64
一、安装必须的软件包
# apt-get install subversion
二、基本的SVN服务器配置
1、新建一个目录用于存储所有SVN版本仓库
# mkdir /home/svn
2、新建一个版本仓库
# svnadmin create /home/svn/greenit
3、初始化版本仓库中目录
# cd ~
# mkdir greenit greenit/exten greenit/_inc greenit/_cfg greenit/__debug greenit/index.php greenit/index.html(创建临时目录)
# svn import greenit file:///home/svn/greenit -m "初始化SVN目录"
# rm -rf greenit
4、添加用户
要添加SVN用户非常简单,只需在/home/svn/greenit/conf/passwd文件中添加一个形如“username=password”的条目就可以了。如下:
[users]
# harry = harryssecret
# sally = sallyssecret
# sally = sallyssecret
admin = 123456
sqt = 123456
xfs = 123456
zly = 123456
5、修改用户访问策略
在/home/svn/greenit/conf/authz中修改
[groups]
admin=admin,sqt,xfs,zly
[greenit:/]
@admin=rw
*=
6、修改svnserve.conf文件,让用户和策略配置生效。
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
7、启动SVN服务器
# svnserve -d -r /home/svn
-d 表示svnserve以“守护”进程模式运行
-r 指定文件系统的根位置(版本库的根目录),这样客户端不用输入全路径,就可以访问版本库。
8、测试服务器
1)、导入项目,创建SVN仓库副本
mkdir /var/www
cd /var/www
svn co svn://192.168.110.132/greenit --username admin --password 123456(--username,--password可以省略)
2)、设置同步更新
同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。
# sudo vim /home/svn/greenit/hooks/post-commit
内容:
#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update /var/www/greenit --username admin --password 123456
或
#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn up /var/www/greenit --username admin --password 123456
给脚本增加可执行权限
chmod +x /home/svn/greenit/hooks/post-commit
3)、
三、SVN服务器管理
1、删除文件
svn delete svn://192.168.110.132/greenit/index.html -m "delete test file"
svn delete svn://192.168.110.132/greenit/index.php -m "delete test file"
2、查看日志
svn log svn://192.168.110.132/greenit/exten
或
cd /var/www/greenit
svn log exten
3、查看文件详细信息
svn info svn://192.168.110.132/greenit/exten
或
cd /var/www/greenit
svn info exten
4、停止svn服务
sudo killall svnserve
四、SVN服务器配置文件详解
1、svnserve.conf
vim svnserve.conf
查看该文件,首先是匿名用户的权限配置:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db=authz
表示对于匿名用户,无访问权限;对于授权用户,有写权限; 授权登陆方式使用了password-db、authz-db两种方式;
password-db ,就是用户名和密码都是明文存放在同级目录下的passwd文件中;
authz-db,这种方式的用户密码使用了sasl加密,安全上有保证;
2、authz(权限控制文件)
默认是没有配置的,要参照下面示例来配置
[groups]
admin = sqtang,xxlu
[iot:/]
@admin = rw
sqtang = rw
xxlu = rw
上面配置的格式如下:
[groups]
<用户组名> = <用户1>,<用户2>,……
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中,方括号内部分可以有多种写法:
/ ------ 表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/var/svn/。这样,/就是表示对全部版本库设置权限。
iot:/ ------ 表示对版本库iot设置权限
iot:/trunck ------ 表示对版本库iot中的trunk目录设置权限
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、rw和空,空表示没有任何权限。
3、passwd(用户密码文件)
vim passwd
默认也是没有配置任何用户的,可按下面配置示例配置
[users]
sqtang = 123456
xxlu = 123456
用户密码的配置格式:
[users]
<用户1> = <密码1>
<用户2> = <密码2>
注意:这里的配置文件,除了注释每行都必须顶行,否则又会报错了。
四、常见问题
1、post-commit hook failed (exit code 255) with no output
解决办法:赋予post-commit文件可执行权限,在文件第一行有没有#!/bin/sh,我曾经就出现过这样的问题,在Post-commit第一行不是#!/bin/sh开头也是出现255的
4、开启SVN默认端口,默认是3690
在测试的时候,在本机可以使用svn,但是到了其他主机(在同一个局域网)就不行,错误信息提示:svn:无法连接主机“192.168.110.128”:没有到主机的路由。这就是防火墙的问题,要保证服务器和客户端都没有屏蔽这个端口
五、参考资料