使用 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. Android笔记:java 中的数组

    在与嵌入式设备通讯的过程中使用的socket通讯 获取的字节流,通常转换为字节数组,需要根据协议将字节数组拆分.对于有规律的重复拆分可以使用,由于java中不能像c中直接进行内存操作例如使用struc ...

  2. Android笔记:真机调试

    参考:android通过USB使用真机调试程序 手机:华为Y511-U00 1.将手机USB调试模式连接到PC(直接用数据线连接到PC一般可以自动切换) 2.连接成功后提示安装驱动,我选择的是自动安装 ...

  3. Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select

    此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,对下拉列表框 Select 的操作. 下拉列表是 Web UI 自动化测试过程中使用率非常高的,通常有两种形式的下拉列表,一 ...

  4. saltstack之(四)远程执行及常用模块

    前几篇文章已经完成了saltstack的安装.认证,从这篇文章开始学习使用saltstack的远程执行. 1.salt远程执行命令详解Usage: salt [options] '<target ...

  5. 微信连Wi-Fi专业设备列表

    微信连Wi-Fi是微信推出的快速连接Wi-Fi热点的功能.商户启用后,其顾客仅需通过微信“扫一扫”二维码等方式,即可快速连接商户提供的Wi-Fi免费上网.连接成功后,用户微信主界面顶部会出现“正在连接 ...

  6. K线指标线计算方法

    指标线计算方法 l   dataDR = Kdata(原始数据)/dr(除权)  //除权数据等于原始数据除以DR(除权) 其中,日K数据 需要本地进行除权处理.周K和月K的旧数据部分由服务器进行处理 ...

  7. 第十篇 Replication:故障排除

    本篇文章是SQL Server Replication系列的第十篇,详细内容请参考原文. 复制故障排除是一项艰巨的任务.在任何复制设置中,都涉及到很多移动部件,而可用的工具并不总是很容易识别问题.Th ...

  8. .Net内存优化的几点经验

    以前从来没有想过.Net开发居然存在内存无法释放的问题,总是认为GC给我处理好了一切.现在GIS二次开发结合三维球开发,没有想到存在如此严重的内存增长,很快内存就不够用了,导致系统各种不稳定.球体和三 ...

  9. python center, ljust, rjust

    例子 >>> s = "jihite" >>> s.center(, "*") '**jihite**' >>& ...

  10. SocketServer model_use

    #!/usr/bin/env python #-*- coding:utf- -*- import SocketServer class MySocker(SocketServer.BaseReque ...