1、安装svn
    安装:yum install subversion
    卸载:yum remove subversion

2、查看svn版本
    svnserve --version

    可能遇到情况:
    svnserve: error while loading shared libraries: libaprutil-1.so.0: cannot open shared object file: No such file or directory

    解决方案:
    (1) 找到libaprutil-1.so.0文件路径
              find / -name libaprutil-1.so.0
              结果例:/www/server/apache/lib/libaprutil-1.so.0
    (2) 将apr依赖包添加到共享库,查看共享库配置文件
              more /etc/ld.so.conf
              结果例:include ld.so.conf.d/*.conf
    (3) 创建apr共享库配置文件
              进入目录:cd /etc/ld.so.conf.d/
              新建文件:vi httpd-apr.conf
              写入libaprutil-1.so.0文件路径:/www/wdlinux/httpd-2.2.22/lib/
              !wq保存
    (4)更新共享库配置
             ldconfig -v
    (5)重复查看svn版本命令(svnserve --version)应该可以了

3、创建版本库
    (1) 创建目录: mkdir /var/svn
    (2) 创建版本库: 
        cd /var/svn
        svnadmin create /var/svn/svnrepos

        此时svnrepos目录下有文件夹conf、db、hooks、locks和文件format、README.txt;

        db目录:所有版本控制的数据存放文件。
        hooks目录:放置hook脚本文件的目录。
        locks目录:用来追踪存取文件库的客户端。
        format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
        conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)。

    (3) 修改配置文件
        cd conf

        authz:是权限控制文件。
        passwd:是账号密码文件。
        svnserve.conf:SVN服务配置文件。

        设置密码:
        a.vi passwd
        b.在 [users] 块中添加用户账号和密码,格式:账号=密码,比如mask = 123456(注意等号两端要有一个空格),保存退出。

        设置权限
        a.vi authz
        b.在末尾添加用户(其中,r表示读,w表示写)
            [/]
            mask=rw
        c.保存退出

        修改svnserve.conf文件
        a.vi svnserve.conf
        b.打开以下几个注释并修改部分参数(注意每行不能以空格开始,等号两端要有一个空格)
            anon-access = none #设置为 none,可以使日志日期正常显示
            auth-access = write #授权用户可写
            password-db = passwd #使用哪个文件作为账号文件
            authz-db = authz #使用哪个文件作为权限文件
        c.保存退出

    (4) 启动SVN版本库
        svnserve -d -r /var/svn/svnrepos

        查看SVN服务是否开启:ps -ef |grep svn
        停止SVN命令: killall svnserve

4、使用svn钩子实时同步线上项目
    例:线上项目:/www/wwwroot/test
        svn代码库:/var/svn/svnrepos

注:svn服务器刚搭建完成时,svn代码库(/var/svn/svnrepos)下是没有数据的,windows安装了Tortoise SVN后checkout一下代码库(svn://服务器ip地址)

        这时候把要上线的项目添加到刚刚checkout出来的文件夹下commit提交

    (1) 同步一份svn代码库代码到线上目录
        cd /www/wwwroot/test
        svn co svn://localhost    #此时/var/svn/svnrepos下的项目会同步到线上目录

    (2) 进入/var/svn/svnrepos项目库的 hooks/ 目录下新建 post-commit 文件(post-commit就是钩子,svn每次变更都会执行这个文件)
        cd /var/svn/svnrepos/hooks
        vim post-commit
        在文件中写入:

#!/bin/sh
export LANG=zh_CN.UTF-8
SVN=/usr/bin/svn     #这里配置的是svn安装bin目录下的svn文件
WEB=/www/wwwroot/test     #线上环境目录地址
LOG=/home/admin/svn/svn_update.log  #同步日志
echo `whoami`,$REPOS,$REV >> $LOG
$SVN update $WEB --username mask  --password 123456 --no-auth-cache >> $LOG     #用户名和密码改为自己的svn用户名和密码
#chown -R 766 $WEB

    (3) 保存后设置文件权限
        chmod a+x post-commit
    
    (4) 测试

        测试svn提交后线上的项目是否会同步,如果有出错,百度上搜一下一般都会有解决方案

5、 开机自启动svn
    (1)传统方式
        a.首先:编写一个启动脚本svn_startup.sh,我放在/root/svn_startup.sh

#!/bin/bash
/usr/bin/svnserve -d -r /var/svn/svnrepos/  #后面的路径是你的svn服务器路径

注:这里的svnserve路径保险起见,最好写绝对路径,因为启动的时候,环境变量也许没加载。(绝对路径查看:which svnserve)

        b.修改执行权限
            chmod 777 svn_startup.sh
        c.加入自行启动
            vi /etc/rc.d/rc.local
            在末尾添加脚本的路径,如:
            /root/svn_startup.sh
        d.重启查看进程:ps -ef|grep svnserve
    (2)centos 7 系统使用以上方式无效,因为/etc/rc.d/rc.local 是没有执行权限的
        a.查看svn配置文件
            vi /lib/systemd/system/svnserve.service
            文件内容如下:
            [Unit]
            Description=Subversion protocol daemon
            After=syslog.target network.target

            [Service]
            Type=forking
            EnvironmentFile=/etc/sysconfig/svnserve                  #这个就是配置路径
            ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS

            [Install]
            WantedBy=multi-user.target

        b.编辑配置文件
            vi /etc/sysconfig/svnserve
            将 OPTIONS="-r /var/svn" 改为 svn 版本库存放的目录(例:/var/svn/svnrepos),保存退出
        c.启动服务:systemctl enable svnserve.service
        d.查看服务列表:systemctl list-units --type=service
        e.重启查看进程