svn配置目标:有N个项目proj1,proj2,每个项目都需要设置一个版本库,但是所有的版本库共用一个 passwd 和 authz 文件,方便集中管理和控制。
关于在 linux 下简单配置一个SVN服务器的方法,可参照本站文章:
linux(centos)搭建SVN服务器
1.建立svn库根目录
mkdir /data/svn
2.建立项目的目录和其下面子项目的库
cd /data/svn
mkdir {proj1,proj2}
svnadmin create /data/svn/proj1/
svnadmin create /data/svn/proj2/
3.建立统一的passwd和authz文件(目前在svn根目录/data/svn下,一会儿svn启动就使用这个目录)
mkdir /data/svn/conf
cd /data/svn/conf
touch {passwd,authz}
4.配置passwd和authz
vi passwd 输入如下内容:
[users]
user1=pwd1
user2=pwd2
user3=pwd3
user4=pwd4
user5=pwd5
保存退出(格式是 用户名=密码,不需要在系统设立相应帐号,密码是明文,注意安全)
vi authz 输入如下内容:
[groups]
admin=user1,user2
proj1=user3,user4
proj2=user5,user3
[/]
*=
@admin=rw
[proj1:/]
@proj1=rw
[proj2:/]
@proj2=rw
保存退出(这样,匿名用户*不允许读写,admin组里的可以读写任意项目,user3,user4可以读写proj1,user3,user5可以读写proj2,可以按照项目实际情况在这个文件里分配读写权限,也可以直接使用用户名分配权限而不一定需要使用组)
5.配置每个子项目的svnserve.conf文件
分别进入到 proj1 和 proj2 下的 conf 目录里,按如下设置,这里以进入 proj1 的设置为例:
vi svnserve.conf
输入如下内容或者取消如下内容前面的注释:
anon-access = none #匿名用户不可读
auth-access = write #授权用户可写
password-db = ../../conf/passwd #使用哪个文件作为账号文件
authz-db = ../../conf/authz #使用哪个文件作为权限文件
realm = proj1 #注意在 proj2 项目中这里需要设置为 proj2
6.启动SVN服务
一般使用 svnserve -d -r /data/svn
复杂的启动方法和命令参数解释
su - svn -c "svnserve -d --listen-port 9999 -r /data/svn"
#检查是否启动:
ps -ef|grep svn
#如果显示如下,即为启动成功,例如:
svn 6941 1 0 15:07 ? 00:00:00 svnserve -d –listen-port 9999 -r /data/svn
额外说明:
su - svn 表示以用户svn的身份启动svn
-d 表示以daemon方式(后台运行)运行
–listen-port 9999 表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限
-r /data/svn 指定SVN服务的目录,这里是/data/svn
7.使用版本库
在客户端使用
svn://ip/proj1/
即可访问 proj1 的目录,若启动时设置了端口号,则需要使用
svn://ip:port/proj1/
8.版本库测试和防火墙设置
服务测试方法 1:
cd /tmp
mkdir /tmp/test
touch test.txt
svn import /tmp/test/ /data/svn/proj1 -m "this is thie first import"
mkdir -p /tmp/test2
cd /tmp/test2
svn co /data/svn/proj1 /tmp/test2/
#或者:
svn co svn://{your-server-ip}:9999/proj1
#这时应该可以看到文件test.txt.
服务测试方法 2:
telnet {your-server-ip} 9999 检查端口是不是通的
如果telnet 检查不通,有可能是防火墙(iptables)里面端口没开:
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -p tcp --dport 9999 -j ACCEPT
#保存完成,重启 iptables
/etc/init.d/iptables restart
#或
service iptables restart