​一、安装SVN​

  1. ​通过yum安装Subversion​
    在Linux系统中执行以下命令安装:
    yum install subversion -y
    安装完成后,验证版本:
    svnserve --version

​二、创建版本库

  • ​选择存储路径并创建目录​
    通常将版本库放在/var/svn或/usr/local/svn目录下:

    mkdir -p /var/svn/repo  # 创建版本库根目录
    cd /var/svn
  • ​初始化版本库​
    使用svnadmin create命令创建具体的版本库(例如project):

    svnadmin create /var/svn/project

    完成后,版本库目录下会生成conf(配置文件)、db(数据库)等子目录

    三、配置权限与用户​

    进入版本库的conf目录(/var/svn/project/conf),修改以下文件:

  • ​**配置svnserve.conf**​
    编辑文件并取消注释以下内容

    [general]
    anon-access = none      # 禁止匿名访问
    auth-access = write     # 授权用户可写
    password-db = passwd    # 用户密码文件路径
    authz-db = authz        # 权限控制文件路径
    realm = /var/svn/project  # 认证空间名(版本库路径)
  • ​设置用户密码(passwd文件)​​
    在[users]块中添加用户名和密码:

    [users]
    user1 = password1
    user2 = password2
  • ​配置权限组(authz文件)​​
    定义用户组及权限(例如开发组devs对根目录有读写权限)

    [groups]
    devs = user1, user2
    
    [/]
    @devs = rw
    * = r    # 其他用户只读

​

四、启动SVN服务​

  1. ​启动服务​
    通过以下命令启动SVN服务:

    svnserve -d -r /var/svn  # -d表示后台运行,-r指定版本库根目录
  2. ​设置开机自启​
    编辑/etc/rc.local文件,添加启动命令:

    echo "svnserve -d -r /var/svn" >> /etc/rc.local
    chmod +x /etc/rc.local
  3. ​防火墙配置​
    开放SVN默认端口3690:

    firewall-cmd --permanent --add-port=3690/tcp
    firewall-cmd --reload

    或临时关闭防火墙:

    systemctl stop firewalld

五、自动化部署(可选)​​

若需将SVN与LNMP的Web目录同步(例如自动更新代码到网站根目录):

  1. ​配置post-commit钩子脚本​
    在版本库的hooks目录中创建脚本:
    cd /var/svn/project/hooks
    cp post-commit.tmpl post-commit
    vi post-commit
    添加以下内容(假设Web目录为/home/wwwroot):
    #!/bin/sh
    export LANG=zh_CN.UTF-8
    SVN=/usr/bin/svn
    WEB=/home/wwwroot/project
    $SVN update $WEB --username user1 --password password1
    赋予执行权限:
    chmod 755 post-commit
  2. 在web目录/home/wwwroot同样检出版本库(第六步操作),否则会报错Skipped '/www/wwwroot/dist' svn: E155007: None of the targets are working copies

六、验证操作​

  1. ​本地检出测试​
    使用客户端执行:

    svn checkout svn://服务器IP/project --username user1

    输入密码后,若成功检出则配置完成

  2. ​提交代码测试​
    在本地修改文件后提交

    svn commit -m "首次提交"

    若自动同步到Web目录,则检查文件是否更新

七、可能会出现以下报错 

     post-commit hook failed (exit code 127) with output:   或者  客户端提交不上去,从以下几个步骤去解决

1. 检查脚本命令路径​
  • 确保所有命令使用绝对路径,例如:
    # 错误写法:svn update ...
    # 正确写法:/usr/bin/svn update ...
    /usr/bin/svn update /var/www/html --username user --password pass
​2. 设置文件权限与用户​
  • 赋予 post-commit 执行权限:
    chmod 755 /var/svn/project/hooks/post-commit
  • 修改目录所有权(根据 Web 服务器用户):如果是
    chown -R www:www /var/svn/project
    chown -R www:www /var/www/html
    若使用 Windows 环境(如 VisualSVN Server),需确保服务账户有权限执行钩子脚本。
​3. 修复环境变量与编码​
  • 在脚本开头添加环境变量声明:
    #!/bin/sh
    export LANG=en_US.UTF-8  # 或 zh_CN.UTF-8
    export PATH=/usr/bin:/usr/local/bin:$PATH
    避免因语言环境或 PATH 缺失导致的命令未找到问题。
​4. 增强错误处理逻辑​
  • 在关键命令后添加错误处理:
    /usr/bin/svn update /var/www/html || exit 1
    exit 0  # 确保脚本最终返回成功状态
    此方法可捕获 svn update 失败并正确退出。
​5. 验证脚本独立运行​
  • 手动执行钩子脚本以定位问题:
    cd /var/svn/project/hooks
    ./post-commit
    观察输出是否包含具体错误(如文件不存在或权限拒绝)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐