介绍svn的hook机制

220 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

什么是svn

SVN是subversion的缩写,是一个 开放源代码 的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

什么是hook机制

所谓svn的hook机制,就是用户在管理数据仓库的时候,当特定的事件发生时,相应的hook会被调用,hook 其实就相当于特定事件的处理函数。

hook事件

1、start-commit,该事件一般用于判断用户是否有权限进行提交 操作。,触发时机是事务创建之前。

2、pre-commit,该事件用于对提交内容进行检查。如要求 提交必须填写提交信息。触发时机是事务完成,但未提交。

3、post-commit,该事件一般用于发送邮件通知,备份代码库或驱动自动构建。触发时机是提交事务后。

4、pre-revprop-change,可以进行属性变更权限的控制,触发时机属性变更前,尚未变化。

5、post-revprop-change,可以进行版本属性的备份和邮件发送。触发时机是属性变更前。

6、pre-lock,可以进行是否能加锁的控制,触发时机加锁前。

7、post-lock,可以进行邮件通知,让开发人员知道文件已经加锁。触发时机是加锁后。

8、pre-unlock,可以进行是否能解锁的控制,触发时间是解锁前。

9、post-unlock,可以邮件发送,通知开发人员文件已经解锁,触发时机是解锁后。

简单使用例子

我们简单写个例子实现用户提交完代码后更新服务器上相应目录的文件。我们可以找到svn的hooks目录下,然后新增一个post-commit文件,并赋予文件可执行的权限。文件内容如下

export LANG=en_US.UTF-8  //这个一看就知道
SVN_PATH=/usr/bin/svn  //svn地址,这个基本不用改
WEB_PATH=/usr/local/nginx/html/tp_shop //你的项目的所对应的目录
SVN_USER=nicai  //svn账号
SVN_PASS=111111  //svn密码
LOG_PATH=/tmp/svn.log  //svn的日志文件,可以不要

$SVN_PATH update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache //这句话的意思应该就是让两个项目中的内容同步的

这样设置完之后,在你提交代码之后,服务器对于的目录代码也会自动同步,就不需要每次都手动执行svn update来更新代码了。