使用 hook ,为了方便管理员 控制提交的过程 Subversion 提供了 hook 机制。当特定的 事件发生时,相应的 hook 会被调用, hook 其实就相当于特定 事件的处理函数。每个 hook 会得到与它所处理的事件相关的参数,根据 hook 的 返回值, Subversion 会决定是否继续当前的提交过程。

当前 Subversion 提 供了 5 种可以安装的 hook :

事 件名

时 机

与 hook 交 互

一 般用途

start-commit

事务创建之前。

传给 hook 的 参数:

-         参 数 1 , 代码库路径。

-         参 数 2 , 试图提交的用户名。

hook 的返回值:非 0 则 终止。

判断用户是否有权限进行提交 操作。

pre-commit

事务完成,但未提交。

-         参 数 1 , 代码库路径。

-         参 数 2 , 事务名。

hook 的返回值:非 0 则 终止提交,操作回滚。

对提交内容进行检查。如要求 提交必须填写提交信息。

post-commit

事务提交完毕,新的修订版被 创建。

传给 hook 的 参数:

-         参 数 1 , 代码库路径。

-         参 数 2 , 刚创建的修订版号。

hook 的返回值被忽 略。

发送邮件通知,或备份代码 库。

pre-revprop-change

修改修订版属性(如提交时提 供的信息 message )之前。

由于修订版属性一旦修改就会 永久的丢失,除非安装这个事件的 hook , subversion 的 客户端不允许远程修改修订版属性。

传给 hook 的 参数:

-         参 数 1 , 代码库路径。

-         参 数 2 , 要修改的修订版号。

-         参 数 3 , 操作用户名。

-         要 修改的属性。

hook 的返回值:非 0 则 终止。

保存修订版属性的改变记录。

post-revprop-change

修订版属性值被修改之后。

如果没有安装 pre-revprop-change 的 hook , 这个事件的 hook 不会被执行。

传给 hook 的 参数:

-         参 数 1 , 代码库路径。

-         参 数 2 , 要修改的修订版号。

-         参 数 3 , 操作用户名。

-         要 修改的属性。

hook 的返回值被忽 略。

发送邮件通知。

hook 只有安装之后才 会被执行,在 Subversion 中这一过程相当简单。只需将 hook 放 在代码库目录的 hooks 子目录下即可。为了能顺利地找到它们, Subversion 规 定 hook 的 命名与上表的事件名同名,如 pre-commit 的 hook 名就是 pre-commit (请 确保它是可执行的,在 windows 平台下需要添加对应的扩展名,如 bat 、 exe 、 com 。)。 创建代码库之后, Subversion 会创建对应的这 5 个事件的 hook 模 版。选取所需的模版,然后将其改名,在修改内容。这样 hook 就可以工作了,当 然请先确保 hook 本身能正常的执行。

hook 的编写非常简 单,通常的做法:

-         法 1 : 使用所在平台的脚本语言,如 unix 下的 shell ,或 windows/dos 的 批处理命令。

-         法 2 : 使用相关的语言,如 c 。

-         法 3 : 使用脚本语言,如 python 或 perl 等实现主体。然后 通过法 1 来调用。

-         法 4 : 使用相关的语言实现主体,然后通过法 1 来调用。

这里给出在 windows 下 使用 bat 的例子,它实现了 pre-commit hook 主 要作用是检查提交内容中是否包含说明信息,如果没有就放弃:

set REPOS=%1

set TXN=%2

set SVNLOOK="D:/Program Files/Subversion/bin/SVNLOOK.exe"

rem  此处不太严格, 因为把空格也算了

FOR /F "usebackq delims==" %%i IN (`%%SVNLOOK%% log -t %TXN% %REPOS%`) DO exit 0

exit 1

由于平台的脚本系统功能毕竟 有限( unix 下的不太清楚,不过批命令就太差了),建议采用方法 2 、 3 和 4 。 从简易性方面的考虑,推荐方法 3 。因为象 python 就已经提供了 一些常用的功能,如发送邮件。

最后,就是 subversion 以 正在存取代码库的过程的所属用户来执行 hook 。因此,请确保这个用户具有足够的权限,可以访问 hook 可 以直接或间接访问的资源。

Subversion简明手册--使用hook svn的更多相关文章

  1. Python 绝对简明手册

    Python 绝对简明手册 help(函数名)来获取相关信息 另外,自带的文档和google也是不可少的 2. 基本语法2.1. if / elif / else x=int(raw_input(&q ...

  2. tomcat和iis共用80端口的简明手册

    ​​对于使用tomcat-connector实现iis与tomcat实现80端口共用的问题,网上的信息异常混乱,很多地方误人子弟,浪费时间.本文给出简明手册式的做法: 首先列出我们需要做的事项: 1. ...

  3. PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级

    参考来源: https://github.com/digoal/blog/blob/master/201803/20180326_01.md#postgresql-一主多从多副本强同步简明手册---配 ...

  4. 使用命令行 Subversion 访问项目源文件(SVN)

    from:http://www.open.collab.net/scdocs/ddUsingSVN_command-line.html.zh-cn 命令行 Subversion 入门 如果您参与的项目 ...

  5. Apache Httpd + Subversion 搭建HTTP访问的SVN服务器

    最近要搭建一个SVN服务器.简单安装之后,本地访问没有问题,但作为服务器肯定是需要HTTP访问.搜索之后,以下是我按照网上的资料搭建的过程,以备后用和参考.(所有软件安装步骤略,没有特殊的,如果没有特 ...

  6. Git简明手册

    文/AbnerKang(简书作者)原 文链接:http://www.jianshu.com/p/d7a7ba4f2341?utm_campaign=maleskine& utm_content ...

  7. 什么是SVN(Subversion)? 为什么要用SVN? (2011-09-05 15:09:47) 转载 ▼

    转自:http://blog.sina.com.cn/s/blog_54ccd3500100tkvo.html 什么是SVN(Subversion)? 有一个简单但不十分精确比喻: SVN = 版本控 ...

  8. Git 简明手册

    0,Git 是什么 Git 是一个VCS(Version Control System),即版本控制系统. 版本控制系统从字面意思来看,它的用途就是管理/控制文件的版本.使用它,可以方便的知道一个文件 ...

  9. gdb简明手册

    如果是在windows环境下,首先要添加环境变量: 新建一个环境变量MinGW_PATH,值为MinGW的运行目录: 然后在系统的Path变量后面加上一句:(每两个变量之间用 ; 分开) ------ ...

随机推荐

  1. tableView中自定header视图的重用问题

    在UItableView中使用代理方发 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger ...

  2. Mac 系统下将普通文件变为可执行文件

    在使用Cocospods时,老是提示我pod文件里面有文稿的东西.后来想到前同事将他变为可执行文件了.所以百度了一下,方法如下: chmod +x (此处是文件的地址) 就可以了

  3. iOS初级数据持久化 沙盒机制 归档与反归档

    数据持久化就是数据保存成文件,存储到程序中的沙盒中. 沙盒构成 Document 存储用户数据,需要备份的信息 Caches 缓存文件, 程序专用的支持文件 Temp 临时文件 通过代码查找程序沙盒的 ...

  4. The include feature of SQL Server Index

    1. Why we need the index 'include' feature? For SQLServer , the length of all the index key have a l ...

  5. meizu mx4 usb调试

    meizu mx4 打开 USB 调试模式 连接手机 连接 usb 调试前,要确定调试模式已打开 在 设置 -> 辅助功能 -> 开发者选项 -> USB 调试 上打开 USB 调试 ...

  6. ios runtime swizzle

    ios runtime swizzle @implementation NSObject(Extension) + (void)swizzleClassMethod:(Class)class orig ...

  7. [SharpDevelop]菜单状态更新

    方式一 在Idle方法中更新 void OnApplicationIdle(object sender, EventArgs e) { // Use the Idle event to update ...

  8. 防止IE不支持console.log报错

    function log(msg){ if (window["console"]){//判断是否是IE console.log(msg); } }

  9. C# WebApi传参之Get请求-AJAX

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷.  学无止境,精益求精    在介绍本篇博客之前,先来温故下AJax的请求, ...

  10. Java基础之创建窗口——使用卡片布局管理器(TryCardLayout)

    控制台程序. 卡片布局管理器会生成一叠组件——一个组件放在另一个组件的上面.添加到容器中的第一个组件在堆栈的顶部,因此是可见的,添加的最后一个组件在堆栈的底部.使用默认的构造函数CardLayout( ...