svn 服务端配置

1. 创建版本库

单版本库与多版本库各有优点和缺点,主要根据具体项目情况进行选择。

1.1. 多库模式

  1. 创建

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    mkdir -p /home/repos
    ➜ svnadmin create /home/repos/resume
    ➜ svnadmin create /home/repos/blog
    cd /home/repos
    ➜ tree -L 2
    .
    |-- blog
    | |-- README.txt
    | |-- conf
    | |-- db
    | |-- format
    | |-- hooks
    | `-- locks
    `-- resume
    |-- README.txt
    |-- conf
    |-- db
    |-- format
    |-- hooks
    `-- locks
  1. 公用一份 authz 和 passwd 文件

    1
    2
    3
    mv blog/conf/authz ./
    mv blog/conf/passwd ./
    rm -rf resume/conf/authz resume/conf/passwd
  2. 分别设置每个库的 svnserve.conf 文件

    以 blog 为例 vim /home/repos/blog/conf/svnserve.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 匿名用户只读(read或none)
    anon-access = none

    # 认证用户可写
    auth-access = write

    # 公用 passwd 文件的位置
    password-db = ../../passwd

    # 公用 authz 文件的位置
    authz-db = ../../authz

    # 仓库的文件名(具体在客户端更新下载的时候能看到仓库名字)
    realm = blog
  3. 修改公用的 passwd 设置用户名、密码

    # vim /home/repos/passwd

    1
    2
    3
    4
    [users]
    admin = admin
    lisi = pwdls
    zhansan = pwdzs
  4. 修改公用的 authz 设置用户访问权限

    vim /home/repos/authz

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [groups]
    admin = admin
    blog_rw = zhangsan
    resume_rw = lisi

    [/]
    @admin = rw

    [blog:/]
    @blog_rw = rw

    [resume:/]
    @resume_rw = rw

    说明:admin 可以读写 blog、resume;zhangsan 只能读写 blog;lisi 只能读写 resume。

1.2. 单库模式

单库方式比较简单,只针对于单一项目的开发管理,并且在单库方式下一台服务器只能创建一个样本库,限制较大!

创建一个新的单库 cms

1
2
mkdir -p /home/repos2
➜ svnadmin create /home/repos2/cms

单库模式下,配置文件在 /home/repos2/cms/conf 下,其中 svnserv.conf 和 passwd 的配置方式与多库相似,authz 的配置有较大区别,如下:

vim /home/repos2/cms/conf/authz

1
2
3
4
5
6
7
[groups]
admin = admin
dev = wanger

[/]
@admin = rw
@dev = rw

2. 启动

注意:svn 默认监听端口 TCP 3690,如果开启了防火墙需提前加入可访问列表;或者在启动时候,使用参数 --listen-port

多库 svnserve -d -r /home/repos

单库 svnserve -d -r /home/repos/cms

  • -d 以守护模式运行
  • -r 指定 svn 服务的根目录
  • --listen-port 指定 svn 服务监听的端口号

3. 访问

多库模式需要指定具体的库名,如:

1
2
➜  svn co svn://192.168.0.1/blog
➜ svn co svn://192.168.0.1/resume

单库模式只需要输入ip或域名地址,如:

1
➜  svn co svn://192.168.0.1

4. 停止服务

killall svnserve

1
2
➜  ps -aux|grep svnserv
kill -9 $pid

5. 其它

5.1. 创建通用版本库布局

在开发过程中,推荐创建如下布局文件:

  • trunk
  • branches
  • tags

步骤:

  1. 创建目录布局临时文件

    1
    2
    3
    4
    5
    6
    mkdir -p /tmp/repos_layout/{trunk,branches,tags}
    ➜ tree /tmp/repos_layout/
    /tmp/repos_layout/
    |-- branches
    |-- tags
    `-- trunk
  2. 导入到版本库中

    1
    2
    3
    4
    5
    6
    ➜  svn import /tmp/repos_layout svn://192.168.0.1/resume -m 'init'
    Adding /tmp/repos_layout/branches
    Adding /tmp/repos_layout/tags
    Adding /tmp/repos_layout/trunk
    Committing transaction...
    Committed revision 1.

    查看是否导入成功

    1
    ➜  svn list --verbose svn://192.168.0.1/resume
  3. 修改权限

    编辑权限文件 vim /home/repos/authz,设置普通用户访问 trunk,管理员访问版本库根目录 trunk、branches、tags,如下:

    1
    2
    3
    4
    5
    [resume:/]
    @admin = rw

    [resume:/trunk]
    @resume_rw = rw

    ⚠️ 注意:权限是继承的,管理员既然能访问根目录,那么根下的子目录也是有权限访问的;而普通用户一般设置较小的权限集,只能访问指定的目录,比如这里的 trunk。

  4. 访问

    普通用户 svn co svn://192.168.1.1/resume/trunk

    管理员 svn co svn://192.168.1.1/resume/

5.x. 参照资料