1.建立项目版本库

    创建项目版本库使用命令svnadmin。

    创建一个新的subversion项目:project。

[root@xiaoyu ~]# svnadmin create /application/svndata/project
[root@xiaoyu ~]# ls -ld /application/svndata/project/
drwxr-xr-x 6 root root 86 Sep 19 20:38 /application/svndata/project/

提示1:创建SVN项目版本库不能使用命令mkdir创建,因为在版本库后,版本库会有一些结构性文件:
[root@xiaoyu ~]# ll /application/svndata/project/
total 8
drwxr-xr-x 2 root root  54 Sep 19 20:38 conf
drwxr-sr-x 6 root root 233 Sep 19 20:38 db
-r--r--r-- 1 root root   2 Sep 19 20:38 format
drwxr-xr-x 2 root root 231 Sep 19 20:38 hooks
drwxr-xr-x 2 root root  41 Sep 19 20:38 locks
-rw-r--r-- 1 root root 229 Sep 19 20:38 README.txt

提示2:查看svnadmin命令帮助的方法:
[root@xiaoyu ~]# svnadmin --help 
general usage: svnadmin SUBCOMMAND REPOS_PATH  [ARGS & OPTIONS ...]
Type 'svnadmin help <subcommand>' for help on a specific subcommand.
Type 'svnadmin --version' to see the program version and FS modules.

Available subcommands:
   crashtest
   create
   deltify
   dump
   help (?, h)
   hotcopy
   list-dblogs
   list-unused-dblogs
   load
   lslocks
   lstxns
   pack
   recover
   rmlocks
   rmtxns
   setlog
   setrevprop
   setuuid
   upgrade
   verify

[root@xiaoyu ~]# 

上述的帮助说明svnadmin后可接多个参数与,比如create、help等。
[root@xiaoyu ~]# svnadmin help  create  -->等价于svnadmin --help  create
create: usage: svnadmin create REPOS_PATH

Create a new, empty repository at REPOS_PATH.

Valid options:
 --bdb-txn-nosync         : disable fsync at transaction commit [Berkeley DB]
 --bdb-log-keep           : disable automatic log file removal [Berkeley DB]
 --config-dir ARG         : read user configuration files from directory ARG
 --fs-type ARG            : type of repository: 'fsfs' (default) or 'bdb'
 --pre-1.4-compatible     : use format compatible with Subversion versions
                            earlier than 1.4
 --pre-1.5-compatible     : use format compatible with Subversion versions
                            earlier than 1.5
 --pre-1.6-compatible     : use format compatible with Subversion versions
                            earlier than 1.6

2.调整SVN配置文件及权限文件

    svn的配置文件在项目版本库目录project下的conf目录下, svnserve.conf

[root@xiaoyu ~]# ll /application/svndata/project/conf/
total 12
-rw-r--r-- 1 root root 1080 Sep 19 20:38 authz    -->权限文件
-rw-r--r-- 1 root root  309 Sep 19 20:38 passwd    -->用户、密码文件
-rw-r--r-- 1 root root 3090 Sep 19 20:38 svnserve.conf  -->配置文件

修改配置文件前先进行备份:
[root@xiaoyu ~]# cd /application/svndata/project/conf/
[root@xiaoyu conf]# cp -a svnserve.conf svnserve.conf.$(date +%F)

修改前的配置文件部分内容:
[root@xiaoyu conf]# egrep "\-access|\-db =" svnserve.conf
# anon-access = read 
# auth-access = write
# password-db = passwd
# authz-db = authz
 提示:记住修改时要去掉"#"号后的空格,开头不能有空格

需要修改的内容:
[root@xiaoyu conf]#vim svnserve.conf
anon-access = none
auth-access = write
password-db =  /application/svnpasswd/passwd
authz-db = /application/svnpasswd/authz

快速修改方法:
[root@xiaoyu conf]# sed -i 's/# anon-access = read/anon-access = none/' svnserve.conf 
[root@xiaoyu conf]# sed -i 's/# auth-access = write/auth-access = write/' svnserve.conf                                     
[root@xiaoyu conf]# sed -i 's%# password-db = passwd%password-db =  /application/svnpasswd/passwd%' svnserve.conf           
[root@xiaoyu conf]# sed -i 's%# authz-db = authz%authz-db = /application/svnpasswd/authz%' svnserve.conf

修改后的查询结果如下:
[root@xiaoyu conf]# egrep "\-access|\-db =" svnserve.conf                                                            
anon-access = none
auth-access = write
password-db =  /application/svnpasswd/passwd
authz-db = /application/svnpasswd/authz

重启SVN服务:
pkill svnserve
svnserve -d -r /application/svndata/

kill -USR1 `cat /application/svndata/svn.pid`
svnserve -d -r /application/svndata/ --pid-file=/application/svndata/svn.pid

3.拷贝用户和密码认证文件(passwd)、权限文件(authz)到之前创建的用户保存用户和密码文件的/application/svnpasswd/目录下

   由于在安装后新建了 /application/svnpasswd/目录,目录是空的,所以将/application/svndata/project/conf目录下的用户和密码认证文件(passwd)、权限文件(authz)作为模板:

[root@xiaoyu conf]# cp -a authz /application/svnpasswd/
[root@xiaoyu conf]# cp -a passwd /application/svnpasswd/
[root@xiaoyu conf]# ll /application/svnpasswd/
total 8
-rw-r--r-- 1 root root 1080 Sep 19 20:38 authz
-rw-r--r-- 1 root root  309 Sep 19 20:38 passwd

由于用户的密码存储是明文的,所以注意文件的权限,为了安全,此处将权限改为700.
[root@xiaoyu conf]# chmod -R 700 /application/svnpasswd/
[root@xiaoyu conf]# ll /application/svnpasswd/          
total 8
-rwx------ 1 root root 1080 Sep 19 20:38 authz
-rwx------ 1 root root  309 Sep 19 20:38 passwd

4.配置用户密码及权限:

(1)用户及密码配置:
[root@xiaoyu ~]# cd /application/svnpasswd/
[root@xiaoyu svnpasswd]# vi passwd
[users]
# harry = harryssecret
# sally = sallyssecret
xiaoyu = 123456  -->根据文件中给出的格式,增加此行
提示:
(a)等号前svn账号,等号后为svn密码,密码是明文的,所以要注意密码文件的权限
(b)更改svnserve.conf时,需要重启svn服务,更改passwd、不需要重启

(2)权限配置:
[root@xiaoyu svnpasswd]# vi authz   -->增加如下两行
[project:/]  
xiaoyu = rw

提示:
a.权限配置文件中出现的用户名必须已在用户配置文件中定义;
b.对权限配置文件的修改立即生效,不必重启svn
c.用户组格式:
 一个用户组可以包含1个或多个用户,用户之间用逗号分隔
   [groups]
   harry_and_sally = harry,sally
   harry_sally_and_joe = harry,sally,&joe
d.版本库目录格式:
  [版本库:/项目/目录]
  [repository:/baz/fuz]
  @用户组名 = 权限
  @harry_and_sally = rw
  用户名 = 权限
  * = r
  其中,方括号内部分可以有多种写法:
  [/],表示根目录及以下,根目录是svnserve启动时指定的,在此文中为/application/svndata/,[/]就是表示对全部版本库设置权限。
  [project:/] 表示对版本库repos设置权限;
  [project:/xiaoyu] 表示对版本库project中的xiaoyu项目设置权限;
  [project:/xiaoyu/syt] 表示对版本库project中的xiaoyu项目中的syt项目设置权限