当前位置: 首页 > backend >正文

linux环境下 安装svn并且创建svn版本库详细教程

一、安装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
    观察输出是否包含具体错误(如文件不存在或权限拒绝)
http://www.xdnf.cn/news/6586.html

相关文章:

  • 自媒体工作室如何矩阵?自媒体矩阵养号策略
  • 嵌入式学习笔记 - STM32 ADC 模块工作模式总结
  • 【解决分辨数字】2021-12-16
  • React学习———CSS Modules(样式模块化)
  • Go语言处理HTTP下载中EOFFailed
  • Spring WebFlux与Quarkus实战:云原生微服务开发的两大主流框架深度解析
  • STM32CubeMX使用SG90舵机角度0-180°
  • Rust 学习笔记:关于 String 的练习题
  • python中集合的操作
  • MySQL 与 FastAPI 交互教程
  • 在 Ubuntu 系统中,将 JAR 包安装为服务
  • LongRefiner:解决长文档检索增强生成的新思路
  • Redis + ABP vNext 构建分布式高可用缓存架构
  • IntelliJ IDEA克隆项目失败的解决方法
  • Tomcat发布websocket
  • 笔试强训:Day5
  • FPGA: UltraScale+ bitslip实现(方案+代码)
  • 【递归、搜索和回溯】穷举vs暴搜vs深搜vs回溯vs剪枝
  • 【向量模型 + HNSW 参数如何选择】
  • 用栈实现+-*/计算器
  • GPU八卡A100使用INT4-W4A16量化大模型实验
  • Manus AI 原理深度解析第三篇:Tools
  • 什么是DHCP?
  • JavaScript零基础入门笔记:狂神版
  • C# Try Catch Finally 执行顺序是什么?有返回值呢?
  • Openlayers:如何注册一个新的坐标系统
  • web第二次课后作业--设计一个注册登录系统
  • MyBatis:从入门到深度理解
  • 从入门到实战:时序图核心知识与高效绘制全解析(附模板)
  • 如何利用芯片模型提升终端PCB的SIPI热仿真精度