前言

  用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这一步骤是必须的,不然是提交后是不会自动导出到网站目录的