Subversion安装,配置及权限管理

安装

yum install -y subversion

验证

1
2
svnserve --version
whereis svnserve

创建多版本库

  • 创建目录+初始化版本库

    1
    2
    3
    4
    5
    6
    7
    8
    mkdir -p /data/svn
    cd /data/svn
    ## 版本库1
    mkdir svn_1
    svnadmin create svn_1
    ## 版本库2
    mkdir svn_2
    svnadmin create svn_2
  • 权限管理
    在每个版本库下面都有一个conf文件夹

    1
    2
    3
    4
    5
    6
    7
    8
    [root@server conf]# ls -l svn_1/conf
    总用量 12
    -rw-r--r--. 1 root root 1080 4月 28 14:31 authz
    -rw-r--r--. 1 root root 309 4月 28 14:31 passwd
    -rw-r--r--. 1 root root 2283 4月 28 14:32 svnserve.conf
    ## passwd是密码文件
    ## authz是权限文件
    ## svnserve.conf是本版本库的配置文件

使用一个密码文件和权限文件管理所有版本库

1
2
cp svn_1/conf/passwd passwd
cp svn_1/conf/authz authz

使用svn目录下的passwd和authz文件管理所有版本库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
## 修改各个版本库的配置文件
vim /svn_1/conf/svnserve.conf
## 不允许匿名
anon-access = none
auth-access = write
## 密码文件位置
password-db = ../../passwd
## 权限文件位置
authz-db = ../../authz

## 添加用户名, 密码
vim /data/svn/passwd
admin = 123456
user = 123456
noauthz = 123456

## 权限配置
vim /data/svn/authz
[groups]
g_admin = admin
g_user = user
[svn_1:/]
@g_admin = rw
[svn_1:/user]
@g_user = rw
[svn_1:/user/noauthz]
noauthz =

权限使用自底而上的方式进行控制,如果在当前目录下无法找到该用户的权限, 则查看上一级目录是否有权限
,直到根目录位置,例如上例:

- 查看user用户的权限
1. 在访问noauthz目录时,没有user的权限配置,向上一级查看
2. 在user目录由user用户的权限配置,是读写, 因此,user用户具有noauthz目录的权限;
- 查看nozuthz用户的权限
1. 访问noauthz目录, noauthz没有读写该文件的权限,所以noauthz用户没有noauthz目录权限;

启动

svnserve -d -r /data/svn
-d 后台运行
-r svn的根目录

开机启动

1
2
3
4
chkconfig --list | grep svnserve
svnserve 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
chkconfig svnserve on
svnserve 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

查看在/etc/init.d/svnserve的启动脚本文件,有如下代码:

1
2
3
if [ -f /etc/sysconfig/svnserve ]; then
. /etc/sysconfig/svnserve
fi

1
2
3
4
5
## 增加配置文件
touch /etc/sysconfig/svnserve
## 增加内容
OPTIONS="-r /data/svn/"
## 这样下次开机就可以自动启动svn服务器了

小技巧

  1. ip改变后,修改svn地址

    1
    svn switch --relocate svn://192.168.0.253/xxx svn://192.168.0.100/xxx --username xxx --password xxx
  2. svn提交部分文件

    1
    2
    svn status | awk '{print $2}' | 自定义grep > target.txt
    svn ci --targets target.txt

HTTP支持

svnsverve和http使用不同的密码文件

安装

1
2
3
## apr,apr-util很关键
yum install httpd apr apr-util httpd-devel
yum install mod_dav_svn

修改权限

1
chown apache:apache /data/svn -R

生成密码

1
2
3
4
cd /data/svn
htpasswd http_passwd zm1
htpasswd http_passwd zm2
htpasswd http_passwd zm3

配置

1
2
3
4
5
6
7
8
9
10
## vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
DAV svn
SVNParentPath /data/svn
AuthType Basic
AuthName "Authorization SVN"
AuthzSVNAccessFile /data/svn/authz
AuthUserFile /data/svn/http_passwd
Require valid-user
</Location>

重启

1
service httpd restart

SVN+SSH

客户端设置

  • 设置->Network->ssh client->TortoisePlink.exe
  • 下载putty, 使用PUTTYGEN.EXE将openssh2格式的密钥改成ppk格式的,使用PAGEANT.EXE增加密钥。

svn authz

在svn的authz目录中增加:

1
2
[/]
root = rw

方法1

~/.ssh/authorized_keys对应的public key前面增加如下:

1
2
## /data/svn为svn的根目录
command="/usr/bin/svnserve -t -r /data/svn --tunnel-user=root",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding

例如:

1
command="/usr/bin/svnserve -t -r /data/svn --tunnel-user=root",no-port-forwarding,no-pty,no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwEXTRkzM+/R8NTIY34ZJDg8/UeXTr+2oFX2PPiCazqwUKiD55EzgMcvaZKvGZ9LcswuNc26febwZEfnQDl0HxbIlH+5tlDGk35A/WrLsi3uekTjkIDIw3Do2xb9QlnDtYXRs24lHExdJQJvV7fOdoG9ZCcdX+bU63q3Qj5DfFCpjmw5ocCVcvWTOOIG2wT++0Jxr6W3vBu6fuCVFq6siOEzXEBRx63pj7uYRNvCs6GsgbQnyKNRyZSiouyrb/qRj1AbqRWGBr8kEofgwwnP3xO61pyovZLOrJ9FsjUxTLaGACoGJioOgu4vqywYXnX3TYnYWgx7MPXb/ayhZtHXHqQ== kingwen@kingwen

使用svn co svn+ssh://root@192.168.1.245/p1 检出项目
此种方式该public key将不能登录ssh

方法2

直接使用绝对路径checkout项目:

1
2
## /data/.svn_repos/p1为项目的绝对路径
svn co svn+ssh://root@192.168.1.245/data/.svn_repos/p1