版本管理之SVN实践教程:基础篇(10):svn的hook机制

本文详细介绍了SVN的hook机制,通过实例展示了如何在commit时检查日志是否包含Ticket号,以确保提交规范。内容包括hook模板、生效方式、注意事项,以及解决常见问题的方法,如权限和输出信息的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

svn的hook机制,跟其他很多类似的工具一样,hook机制的本身就是在某个具体的时机所触发的内容,类似于事件驱动的回调。

场景说明

举个简单的例子,我们使用svn commit的时候如果希望对日志的信息进行判断,如果日志中没有包含指定格式的Ticket号时,提示相关的错误信息,不允许提交。这样的场景,就是hook机制起作用的最为常见的情形之一。这篇文章中会用最简单的方式来演示这个机制的设定和使用方式。

svn的hook

svn的hook模版

在创建的svn的仓库中,目前默认包含了如下9种hook的版本

  • start-commit
  • pre-commit
  • post-commit
  • pre-revprop-change
  • post-revprop-change
  • pre-lock
  • post-lock
  • pre-unlock
  • post-unlock

hook说明

这9种相关的hook所触发的时机相关的信息如下

类型 触发时机 常见用途 备注
start-commit 提交事务生成之前 一般可根据用户名对提交进行权限控制,一般多用于对svn版本功能check的检查 参数个数为2,svn 1.5为3个
pre-commit 事务已生成,但是尚未提交 可可根据提交的内容或者comment进行控制,比如提交日志不能为空 -
post-commit 提交之后 数据进行备份,以及修改提示的mail操作,或者驱动自动构建 -
pre-revprop-change 属性变更前,尚未变化 可以进行属性变更权限的控制 -
post-revprop-change 属性变更前 进行版本属性的备份以及mail通知操作等 -
pre-lock 加锁之前 可进行是否能加锁的控制 -
post-lock 加锁之后 可进行mail通知,使开发成员了解此文件已经加锁 往往有时结合特定流程,比如有提交冻结期的结束,可结合这个属性进行使用
pre-unlock 解锁前 可进行是否能解锁的控制 -
post-unlock 解锁之后 可进行mail通知,使开发成员了解此文件已经解锁 往往有时结合特定流程,比如有提交冻结期的结束,可结合这个属性进行使用

hook参数

当前版本的hook的相关参数信息如下所示:

类型 参数1 参数2 参数3 参数4 参数5
start-commit 代码库路径 用户名 - - -
pre-commit 代码库路径 事务名 - - -
post-commit 代码库路径 版本号 事务名 - -
pre-revprop-change 代码库路径 版本号 用户名 属性名 ACTION
post-revprop-change 代码库路径 版本号 用户名 属性名 ACTION
pre-lock 代码库路径 路径 用户名 Comment STEAL(1
post-lock 代码库路径 用户名 - - -
pre-unlock 代码库路径 路径 用户名 TOKEN BREAK-UNLOCK(1
post-unlock 代码库路径 用户名 - - -

起效方式

缺省创建的库中的9个文件均以tmpl结尾,而这样是不起作用的,在Unix/Linux下,删除tmpl的后缀才能起作用,而windows则需要将.tmpl改成.bat。
修改之后立即起效,无需重新启动svn服务。

注意事项

因为安全的考量,在钩子函数中是无法使用环境变量的。Unix/Linux下基础的PATH也是环境变量,因为这个的缘故,导致可执行文件必须使用全路径进行引用,这就是你在代码里面没有看到svnlook而是/usr/bin/svnlook的根本原因。

实例

场景说明:
在版本管理中,我们建议在提交的日志中结合Ticket番号,如果在svn commit的时候提交日志的信息为空或者不包含Ticket号的信息,则无法提交到代码库。日志格式一般为:# xxxx: 日志信息

事前准备

事前准备

准备镜像

可以使用前面文章中Dockerfile生成的alpine的svn的lts版本的镜像,也可以直接使用使用easypack打好的镜像。

[root@liumiaocn svn]# docker pull liumiaocn/svn:1.10.0
1.10.0: Pulling from liumiaocn/svn
8e3ba11ec2a2: Already 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值