linux环境下 安装svn并且创建svn版本库详细教程
一、安装SVN
- 通过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服务
-
启动服务
通过以下命令启动SVN服务:svnserve -d -r /var/svn # -d表示后台运行,-r指定版本库根目录
-
设置开机自启
编辑/etc/rc.local
文件,添加启动命令:echo "svnserve -d -r /var/svn" >> /etc/rc.local chmod +x /etc/rc.local
-
防火墙配置
开放SVN默认端口3690:firewall-cmd --permanent --add-port=3690/tcp firewall-cmd --reload
或临时关闭防火墙:
systemctl stop firewalld
五、自动化部署(可选)
若需将SVN与LNMP的Web目录同步(例如自动更新代码到网站根目录):
- 配置
post-commit
钩子脚本
在版本库的hooks
目录中创建脚本:
添加以下内容(假设Web目录为cd /var/svn/project/hooks cp post-commit.tmpl post-commit vi post-commit
/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
- 在web目录
/home/wwwroot
同样检出版本库(第六步操作),否则会报错Skipped '/www/wwwroot/dist' svn: E155007: None of the targets are working copies
六、验证操作
-
本地检出测试
使用客户端执行:svn checkout svn://服务器IP/project --username user1
输入密码后,若成功检出则配置完成
-
提交代码测试
在本地修改文件后提交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 服务器用户):如果是
若使用 Windows 环境(如 VisualSVN Server),需确保服务账户有权限执行钩子脚本。chown -R www:www /var/svn/project chown -R www:www /var/www/html
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