1. 安装SVN客户端和服务器

  • 安装SVN客户端(以TortoiseSVN为例,适用于Windows环境):
  • 下载地址:
  • 安装过程略过。
  • 安装SVN服务器(以CentOS系统为例):
  • 执行命令:`yum install subversion`
  • 查看下载后的信息,安装位置及详细信息:`rpm -ql subversion`。
  • 2. 创建版本库

  • 选择一个目录用于存放版本库,例如:`mkdir /home/svn/groupRepos`
  • 创建版本库:`svnadmin create /home/svn/groupRepos`
  • 查看并分析生成的文件:`ls /home/svn/groupRepos`,生成的文件包括:
  • `conf`目录:版本库的配置文件,包含用户访问账号、权限等。
  • `db`目录:存放数据。
  • `format`文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
  • `hooks`目录:放置hook脚本文件的目录。
  • `locks`目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端。
  • `README.txt`文件:说明文档。
  • 3. 修改版本库配置文件

    版本库的配置文件位于`/home/svn/groupRepos/conf/`路径下,包含以下几个文件:

  • `authz`:负责账号权限的管理,控制账号是否读写权限。
  • `passwd`:负责账号和密码的用户名单管理。
  • `svnserve.conf`:svn服务器配置文件。
  • 具体修改步骤如下:

  • 修改`authz`文件:
  • 执行命令:`vim /home/svn/groupRepos/conf/authz`
  • 添加账号及权限后的`authz`文件示例:
  • [groups]

    admin = user1, user2

    [/]

    = r

    @admin = rw

    [branches]

    = r

    @admin = rw

    在这个例子中,所有用户都有读取仓库的权限,而`admin`用户组拥有读写权限。

  • 设置密码`passwd`:
  • 执行命令:`vim /home/svn/groupRepos/conf/passwd`
  • 在`[users]`下添加用户账号和密码,格式为:账号 = 密码,例如:`user1 = password1`。
  • 修改`svnserve.conf`文件(重要):
  • 执行命令:`vim /home/svn/groupRepos/conf/svnserve.conf`
  • 找到并修改以下配置行(删除行前面的注释符``和空格,每行不能以空格开始,且等号两端要有一个空格):
  • anon

  • access = read
  • auth

  • access = write
  • password

  • db = passwd
  • authz

  • db = authz
  • realm = /home/svn/groupRepos

    4. 启动SVN服务器

  • 执行命令:`svnserve -d -r /home/svn/groupRepos/`
  • 查看SVN服务是否开启:`ps -ef |grep svn`,当返回类似如下信息时,表示SVN服务已经开启:
  • root 4642 1 0 16:08? 00:00:00 svnserve -d -r /data/svn/repository/

    root 4692 3676 0 16:13 pts/2 00:00:00 grep svn

    5. 客户端访问SVN服务器

  • 在Windows环境下,使用TortoiseSVN客户端:
  • 打开TortoiseSVN Repository Browser工具。
  • 在URL中输入:`svn://服务器IP/版本库名称`,例如:`svn://192.168.1.100/groupRepos`,然后根据提示输入用户名和口令。
  • 在Linux环境下,使用命令行:
  • 执行命令:`svn co svn://服务器IP/版本库名称`,例如:`svn co svn://192.168.1.100/groupRepos`。
  • 6. 设置SVN开机自启动(以CentOS 7为例)

    Linux搭建SVN:步骤与注意事项

  • 创建一个启动脚本文件,例如:`touch /etc/rc.d/init.d/svn`
  • 编辑该文件,添加以下内容:
  • bash

    !/bin/bash

    chkconfig: 2345 85 85

    processname: svn

    svn_bin=/usr/bin

    svn_port=3690

    svn_home=/home/svn/groupRepos

    svn_config=/home/svn/groupRepos/conf/svnserve.conf

    if [! -f "${svn_bin}/svnserve" ]; then

    echo "svnserver startup: cannot start

    exit 1

    fi

    case "${1}" in

    start)

    echo "Starting svnserve...

    ${svn_bin}/svnserve -d -r ${svn_home} --config-file ${svn_config} --listen-port ${svn_port}

    echo "Successfully!

    ;;

    stop)

    echo "Stoping svnserve...

    killall svnserve

    echo "Successfully!

    ;;

    restart)

    ${0} stop

    ${0} start

    ;;

    )

    echo "Usage: svn { start | stop | restart }

    exit 1

    ;;

    esac

  • 给文件添加可执行权限:`chmod +x /etc/rc.d/init.d/svn`
  • 开启开机自启动:`chkconfig svn on`。
  • 二、Linux搭建SVN的注意事项

    1. 权限设置

  • 在修改`authz`文件时,要注意权限的设置逻辑,确保不同用户或用户组具有合适的权限。例如:
  • [groups]

    developers = user1, user2

    testers = user3

    [/]

    = r

    @developers = rw

    @testers = r

    这里设置了`developers`用户组有读写权限,`testers`用户组只有读权限,其他用户也只有读权限。

    2. 版本库备份

  • 定期备份SVN仓库是防止数据丢失的关键。可以使用`svnadmin`命令来备份整个仓库,例如:
  • sudo svnadmin hotcopy /path/to/repo /path/to/backup --clean-logs

    这个命令会创建一个仓库的完整备份,包括所有的修订历史和元数据。

    3. 检查仓库完整性

    Linux搭建SVN:步骤与注意事项

  • 可以使用`svnadmin`命令来检查仓库的完整性,确保没有损坏的数据,例如:
  • sudo svnadmin verify /path/to/repo

    这个命令会检查仓库的数据文件,确保它们的一致性。

    4. 监控仓库使用情况

  • 监控仓库的使用情况可以帮助管理员了解仓库的增长趋势和潜在的问题。可以通过日志文件或第三方工具来实现。
  • 5. 更新和升级

  • 保持SVN服务器软件的更新和升级是确保安全性和功能性的重要步骤。当新的版本可用时,应该按照官方指南进行更新,例如在CentOS系统中:
  • sudo yum update subversion

    6. 用户和权限管理

  • 随着团队的变化,可能需要添加新用户、删除旧用户或更改权限。定期审查和更新`passwd`和`authz`文件来完成这些任务。
  • 7. 日志管理

  • SVN服务器会产生日志文件,记录所有的操作和错误信息。定期检查日志文件可以帮助发现和解决问题,例如:
  • sudo tail -f /path/to/repo/logs/svnserve.log

    使用上述命令可以查看SVN服务的实时日志。

    8. 清理旧版本和垃圾文件

  • 随着时间的推移,仓库中可能会积累一些不再需要的旧版本和垃圾文件。可以使用`svnadmin`命令清理这些数据,例如:
  • sudo svnadmin dump /path/to/repo --drop-empty-revs

    这个命令会创建一个没有空修订的仓库转储,可以用来重建仓库以减少其大小。

    9. SVN钩子脚本应用

  • SVN钩子脚本是在特定事件发生时触发的脚本,如提交(commit)或更新(update)。它们允许你自定义Subversion的行为,以执行如通知、备份、自动审查等任务。
  • 例如,创建一个预提交钩子脚本,检查提交信息是否包含特定的关键词:
  • 在仓库的`hooks`目录下创建`pre-commit`脚本文件(可以先复制`pre-commit.tmpl`文件并修改)。
  • 编辑`pre-commit`文件,添加以下内容:
  • bash

    !/bin/sh

    获取提交信息

    COMMIT_MSG=$(svnlook log -t "$1" "$2")

    检查提交信息是否包含"READY"关键词

    if! echo "$COMMIT_MSG" | grep -q "READY"; then

    echo "ERROR: Commit message does not contain 'READY'.

    exit 1

    fi

    如果没有错误,允许提交

    exit 0

    给`pre-commit`文件添加可执行权限:`chmod +x pre-commit`。