系统环境:腾讯云、CentOS7.3
1. 安装svn(直接安装svn启动时可能报错缺少apr依赖包)
yum install apr apr-util subversion
2. 查看安装是否成功(svn版本)
svnserve --version
3. 创建svn仓库
mkdir /www/svndata
svnadmin create /www/svndata
4.配置访问权限:
a.用户密码passwd配置,编辑 /www/svndata/conf/passwd 文件,在[user]节点下加入用户名和密码,这里创建一个用户(website)专门给svn钩子做同步使用:
[users]
# username = password
website=654321
user1=123456
user2=123456
b.服务svnserve.conf配置,编辑 /www/svndata/conf/svnserve.conf文件,将[general]节点的对应配置改为:
[general]
#禁止匿名访问
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
5.指定端口启动svn服务。
这里以3888端口为例,对应防火墙和云服务器安全策略需要开放这个端口:
svnserve -d -r /www/svndata --listen-port 3888
6.从web网站目录检出第一个版本。
cd /www/wwwroot/www.abc.com
svn checkout svn://127.0.0.0:3888 --username website --password 654321
7.配置post-commit(svn钩子)。
a.创建post-commit,并赋予权限。创建日志记录文件,主要是方便查看最近一条svn记录(记录文件非必要,但有时svn不冲突同步失败时方便解决问题),
cd /www/svndata/hocks
touch post-commit
chown -R 777 post-commit
touch post-commit.log
b.编辑post-commit:
1.必须给予post-commit读写权限
2.svn update 操作过后,文件所有者可能会变为了root,导致apache用户不能访问,因此需要使用chown -R 修改用户组权限
#!/bin/sh
#记录日志
LOG_FILE="/www/svndata/hooks/post-commit.log"
>"${LOG_FILE}"
exec &>>${LOG_FILE}
#设置编码
export LANG=zh_CN.UTF-8
#同步更新目录
svn update /www/wwwroot/www.abc.com --username website --password 654321
#更新权限
chown -R www:www /www/wwwroot/www.abc.com
8.设置svn跟随系统自启动(centos7)
a.编辑 /etc/sysconfig/svnserve文件,将 OPTIONS="-r /var/svn" 改为 svn 版本库存放的目录,例如:
OPTIONS="-d -r /www/svndata --listen-port 3888 "
b.启用系统服务:
#设置自启服务
systemctl enable svnserve.service
#启动svn服务
systemctl start svnserve.service
#停用自启服务
systemctl stop svnserve.service
9.其他命令
#杀死所有svn服务进程
killall svnserve
#解决冲突文件
svn resolve --accept working /www/wwwroot/www.abc.com/index.html
#恢复冲突文件
svn revert /www/wwwroot/www.abc.com/index.html
#清理冲突文件
cd /www/wwwroot/www.abc.com/
svn cleanup
10.一句话总结svn钩子同步过程。
可以理解为程序员提交代码时触发post-commit,在这个post-commit中,我们使用website这个svn账号在网站目录执行了update操作。
本文章是我以前整理的word,借鉴了一些网上的资源,但是已经忘了原出处,抱歉不能一一标明了,还有很多干货也将陆续更新上来。