svn钩子教程
什么是钩子
钩子其实和回调是一个概念,当某个事情发生时就会调用你提供的方法,利用好SVN钩子可以大大的方便你的开发。
web 开发人员,每次提交了代码都需要手动到服务器更新下代码才能看到效果。
钩子的位置存放在仓库中hook中.
当前svn提供了5种钩子
start-commit
开始一个新提交的通知
提交事务创建完, 并且初始属性设置完成后, 紧接着就开始执行钩子 start-commit. 它的典型用法是作为早期的终止机制, 避免浪费大量的 时间等待一个已经确定最终会失败的提交结束, 提交失败的原因可能是用户 缺少提交权限, 或者是某些提交元数据验证失败.
如果钩子 start-commit 的退出值不为零, 提交过程就会中止, 提交 事务也会被销毁, 任何打印到 stderr 的信息 都会返回给客户端.
常见用法:
- 访问控制(例如临时禁止向仓库提交修改)
- 判断用户是否有权限进行提交操作
传递参数:
- 代码库路径
- 用户名
- 以冒号分隔的特性 (capabilities) 列表, 这些特性由客户端传递 给服务器, 包括 depth, mergeinfo 和 log-revprops(log-revprops 在 Subversion 1.5 引入)
- 提交事务名 (在 Subversion 1.8 引入)
返回值:
- 非0则终止
pre-commit
提交即将完成的通知
钩子 pre-commit 在提交事务即将生成一个新的版本号之前被调用. 它的典型用法是禁止内容不符合要求的提交 (例如你的公司可能要求所有 的提交日志消息都要包含来自问题跟踪系统的单号, 或者要求日志消息不 能为空).
如果钩子 pre-commit 的退出值不为零, 提交过程就会中止, 提交事务 也会被销毁, 任何打印到 stderr 的信息都会返回 给客户端.
常见用法:
- 对提交内容进行检查。如要求 提交必须填写提交信息。
传递参数:
- 代码库路径
- 提交事务名
返回值:
- 非0则终止提交,操作回滚。
post-commit
成功提交的通知
事务提交并且新的版本号生成后, Subversion 就会执行钩子 post-commit. 大多数管理员都会利用 post-commit 向团队成员发送关 于新提交的邮件, 或者通知其他工具 (例如一个问题跟踪系统) 有新的提交 生成. 有些管理员还会用 post-commit 触发备份操作.
如果钩子 post-commit 的退出值不为零, 提交过程将 不会 中止, 因为这时候提交已经完成了. 但是, 钩子打印到 stderr 的信息都会返回给客户端, 以 便分析钩子失败的原因.
常见用法:
- 发送邮件通知,或备份代码库。
传递参数:
- 代码库路径
- 新版号的整数编号
- 已经变成版本号的事务名, 正是该版本号触发了本次钩子的运行.
返回值:
- 返回值被忽略。
pre-revprop-change
版本号属性即将被修改的通知
钩子pre-revprop-change在版本号属性即将被修改之前调用,这里所说的版本号修改不是通常提交的一部分.和其他钩子不同的是,pre-recprop-change的默认行为是禁止修改版本号属性.为了允许修改版本号属性.pre-revprop-change必须以0作为退出值
如果pre-revprop-change没有退出,或者不可执行,或者退出值不为0,svn都将禁止修改版本号的属性,钩子打印到stderr的信息都会返回给客户端.
常见用法:
- 保存修订版属性的改变记录。
传递参数:
- 代码库路径
- 即将被修改的版本号的整数编号
- 试图修改版本号属性的已认证的用户名
- 即将被修改的版本号属性的名字
- 用于描述修改类型的字符: A (新增的), D (被删除的), 或 M (被修改的)
返回值:
- 非0则终止。
post-revprop-change
版本号属性被成功修改的通知.
钩子 post-revprop-change 在版本号属性被修改完成后立即执行, 这 里所说的版本号修改不是通常提交的一部分. 从前面对钩子 pre-revprop-change 的介绍读者应该可以很容易推断出, 除非提供了 pre-revprop-change, 否则的话 post-revprop-change根本没机会执行. 这个钩子的典型用途是发邮件通知版本号属性被修改了.
如果钩子 post-revprop-change 的退出值不为零, 那么针对版本号属性 的修改将 不会 被中止, 因为这时候修改已经完成了.
但是, 钩子打印到 stderr 的信息都会返回给客户端, 以便分析钩子失败的原因.
常见用法:
- 发送邮件通知。
传递参数:
- 代码库路径
- 即将被修改的版本号的整数编号
- 试图修改版本号属性的已认证的用户名
- 即将被修改的版本号属性的名字
- 用于描述修改类型的字符: A (新增的), D (被删除的), 或 M (被修改的)
返回值:
- 非0则终止。

浙公网安备 33010602011771号