前言
用hugo搭建了一个博客。总不能每次在本地生成web文件后再用ssh上传文件吧,于是第一时间想到了ftp,但是ftp不是按需更新的,它也没有版本控制,并且上传之前还需要把之前的web目录删除掉,这太麻烦了,就放弃了。我了解到的版本控制软件有git和svn,鉴于我用的是windows系统,并且之前没有接触过git,就选择了svn。
安装并创建SVN仓库
1. 安装
1
2
3
|
$ yum install -y subversion
#我用的是coentos,所以用yum安装svn
|
2. 创建 svn 仓库
1
2
3
4
|
$ mkdir -p /home/mx/blog
$ svnadmin create /home/mx/blog #生成svn架构
$ ls /home/mx/blog
conf db format hooks locks README.txt
|
修改SVN重要的三个文件
其中在 conf 目录下有三个重要的配置文件
- authz - 是权限控制文件
- passwd - 是帐号密码文件
- svnserve.conf - 是 SVN 服务配置文件
1. 配置svnserve.conf
文件里面有,但是被注释掉了,删掉前面的#就可以了
1
2
3
4
5
|
anon-access = none #匿名用户没有权限,如果设置成read,客户端会不显示日志
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /home/mx/blog # 认证空间名,版本库所在目录,不修改也是可以的。
|
2. 配置authz
1
2
3
4
5
6
7
|
[groups] #组成员
adminUser = Admin,Guo #admin_user是组名
user = test
[/]
@admin_user = rw #[/]表示项目根目录,前面加@表示组名,也可以单独去控制用户
# test = r
#r表示读,w表示写
|
3. 配置passwd
1
2
3
4
|
[users]
Admin = password
Guo = password
# 用户名 = 密码
|
配置好这三个文件就可以启动啦
1
2
|
$ svnserve -d -r /home/mx/blog # 启动 svn
$ killall svnserve # 关闭 svn
|
SVN默认监听3690端口,需要防火墙放行tcp3690
到这里服务端就完成了版本控制的配置,如果需要将svn的文件自动导出到web目录或者是在提交前检查是否有写log,就需要去修改svn的生命钩子了
配置hooks
1. 在提交前检查是否有写log
在hooks文件夹下新建 “pre-commit”
vim hooks/pre-commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/sh
REPOS="$1"
TXN="$2"
# 敲which svnlook 就能看见所在路径了
SVNLOOK=/usr/bin/svnlook
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -le 0 ];
then
echo "备注信息不能为空" 1>&2
exit 1
fi
|
chmod +x hooks/pre-commit
赋予权限
2. 将svn的文件自动导出到web目录
在hooks文件夹下新建 “post-commit”
vim hooks/post-commit
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/sh
# 指定编码方式
export LANG=en_US.UTF-8
# svn执行目录,一般就是这个,如果不是可以which svn 查看
SVN=/usr/bin/svn
# svn checkout下来的目录,一般来说就是你的网站根目录
WEB=/home/mx/123
# --username后面是svn账号,--password后面是svn密码
$SVN update $WEB --username Admin --password password
|
chmod +x hooks/post-commit
赋予权限
这里还需要将svn的数据checkout一份到网站目录
cd /usr/share/nginx/html
svn checkout svn://127.0.0.1/
按照提示输入密码就可以了
checkout这一步骤是必须的,不然是提交后是不会自动导出到网站目录的