钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作.
所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的修改。每个钩子都会被告知足够多的信息,包括那是什么事件,所操作的对象,和触发事件的用户名。通过钩子的输出或返回状态,钩子程序能让工作继续、停止或是以某种方式挂起。
默认情况下,钩子的子目录中包含各种版本库钩子模板。
$ ls repos/hooks/
post-commit.tmpl pre-revprop-change.tmpl
post-revprop-change.tmpl start-commit.tmpl
pre-commit.tmpl
对每种Subversion版本库支持的钩子的都有一个模板,通过查看这些脚本的内容,你能看到是什么事件触发了脚本及如何给传脚本传递数据。同时,这些模版也是如何使用这些脚本,结合Subversion支持的工具来完成有用任务的例子。要实际安装一个可用的钩子,你需要在 repos/hooks目录下安装一些与钩子同名(如 start-commit或者post-commit)的可执行程序或脚本。
提示
由于安全原因,Subversion版本库在一个空环境中执行钩子脚本—就是没有任何环境变量,甚至没有$PATH或%PATH%。由于这个原因,许多管理员会感到很困惑,它们的钩子脚本手工运行时正常,可在Subversion中却不能运行。要注意,必须在你的钩子中设置好环境变量或为你的程序指定好绝对路径。
目前Subversion有已实现了五种钩子:
start-commit.bat
它在提交事务产生前已运行,通常用来判定一个用户是否有权提交。版本库传给该程序两个参数:到版本库的路径,和要进行提交的用户名。如果程序返回一个非零值,会在事务产生前停止该提交操作。如果钩子程序要在stderr中写入数据,它将排队送至客户端。
pre-commit.bat
在事务完成提交之前运行,通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个bug追踪的ticket号,或者是要求日志信息不为空)而不允许的提交。版本库传递两个参数到程序:版本库的路径和正在提交的事务名称,如果程序返回非零值,提交会失败,事务也会删除。如果钩子程序在stderr中写入了数据,也会传递到客户端。
Subversion的分发版本包括了一些访问控制脚本(在Subversion源文件目录树的tools/hook-scripts目录),可以用来被 pre-commit调用来实现精密的写访问控制。另一个选择是使用Apache的httpd模块mod_authz_svn,可以对单个目录进行读写访问控制(见“每目录访问控制”一节)。在未来的Subversion版本中,我们计划直接在文件系统中实现访问控制列表(ACL)。
post-commit.bat
它在事务完成后运行,创建一个新的修订版本。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者作为版本库的备份。版本库传给程序两个参数:到版本库的路径和被创建的新的修订版本号。退出程序会被忽略。
Subversion分发版本中包括mailer.py和commit-email.pl脚本(存于Subversion源代码树中的 tools/hook-scripts/目录中)可以用来发送描述给定提交的email(并且或只是追加到一个日志文件),这个mail包含变化的路径清单,提交的日志信息、日期和作者以及修改文件的GNU区别样式输出。
Subversion提供的另一个有用的工具是hot-backup.py脚本(在Subversion源代码树中的tools/backup/目录中)。这个脚本可以为Subversion版本库进行热备份(Berkeley DB数据库后端支持的一种特性),可以制作版本库每次提交的快照作为归档和紧急情况的备份。
pre-revprop-change.bat
因为Subversion的修订版本属性不是版本化的,对这类属性的修改(例如提交日志属性 svn:log)将会永久覆盖以前的属性值。因为数据在此可能丢失,所以Subversion提供了这种钩子(及与之对应的post-revprop- change),因此版本库管理员可用一些外部方法记录变化。作为对丢失未版本化属性数据的防范,Subversion客户端不能远程修改修订版本属性,除非为你的版本库实现这个钩子。
这个钩子在对版本库进行这种修改时才会运行,版本库给钩子传递四个参数:到版本库的路径,要修改属性的修订版本,经过认证的用户名和属性自身的名字。
post-revprop-change.bat
我们在前面提到过,这个钩子与pre-revprop-change对应。事实上,因为多疑的原因,只有存在pre-revprop-change时这个脚本才会执行。当这两个钩子都存在时,post-revprop-change在修订版本属性被改变之后运行,通常用来发送包含新属性的email。版本库传递四个参数给该钩子:到版本库的路径,属性存在的修订版本,经过校验的产生变化的用户名,和属性自身的名字。
Subversion分发版本中包含propchange-email.pl脚本(在Subversion源代码树中的tools/hook- scripts/目录中),可以用来发送修订版本属性修改细节的email(并且或只是追加到一个日志文件)。这个email包含修订版本和发生变化的属性名,作出修改的用户和新属性值。
警告
不要尝试用钩子脚本修改事务。一个常见的例子就是在提交时自动设置svn:eol-style或svn:mime-type这类属性。这看起来是个好主意,但它会引起问题。主要的问题是客户并不知道由钩子脚本进行的修改,同时没有办法通告客户它的数据是过时的,这种矛盾会导致出人意料和不能预测的行为。
作为尝试修改事务的替代,我们通过检查pre-commit钩子的事务,在不满足要求时拒绝提交。
Subversion会试图以当前访问版本库的用户身份执行钩子。通常,对版本库的访问总是通过Apache HTTP服务器和mod_dav_svn进行,因此,执行钩子的用户就是运行Apache的用户。钩子本身需要具有操作系统级的访问许可,用户可以运行它。另外,其它被钩子直接或间接使用的文件或程序(包括Subversion版本库本身)也要被同一个用户访问。换句话说,要注意潜在的访问控制问题,它可能会让你的钩子无法按照你的目的顺利执行
原文:http://hi.baidu.com/gacmotor/blog/item/da499e2b4f65fa25d42af192.html
分享到:
相关推荐
### Linux下SVN安装与配置含钩子详解 #### 一、SVN简介与作用 Subversion(简称SVN)是一种分布式版本控制系统,主要用于代码管理。它可以追踪每一项对文件或目录所做的更改,并且能够查看任何时刻的版本状态。这...
- **钩子脚本**:通过配置钩子脚本,可以在提交时自动执行某些任务,如代码质量检查。 总的来说,搭建Windows SVN服务器并不复杂,主要涉及到安装服务器软件、创建仓库、设置权限以及配置客户端。遵循以上步骤,你...
最后,对于大型项目,建议设置SVN钩子脚本。这些脚本在特定事件(如提交或更新)发生时自动执行,可用于验证提交信息、执行自动化测试或者自动部署。 总结起来,“svn配置”涉及到客户端安装、仓库的获取与管理、...
**Subversion(SVN)安装及详解** Subversion(简称SVN)是一种版本控制系统,用于管理文件和目录的变更历史,特别适用于多人协作的软件开发项目。它允许开发者跟踪和控制代码的修改,同时提供了冲突解决机制,确保...
【华为SVNClient详解】 华为SVNClient是华为公司推出的一款专为软件版本控制系统Subversion(简称SVN)设计的客户端工具,它主要用于协助开发者在华为的开发环境中进行代码版本控制和协同工作。SVN是一种分布式版本...
### SVN冷备方式详解 #### 一、背景介绍 随着软件开发项目的日益增多以及团队规模的扩大,版本控制系统成为项目管理不可或缺的一部分。Subversion (SVN) 作为一款开源的集中式版本控制系统,在众多场景中得到了...
4. 属性和钩子脚本:SVN允许设置文件属性,还可以通过钩子脚本实现自动化操作,如提交前的代码检查。 六、协同开发的最佳实践 1. 经常提交:频繁提交小的改动,可以更好地追踪变化,减少合并冲突。 2. 使用有意义的...
**免安装SVN插件详解** SVN,全称Subversion,是一种版本控制系统,用于管理对文件和目录的更改,广泛应用于软件开发中,便于团队协作和代码版本管理。免安装版的SVN插件为开发者提供了一种便捷的方式,在不进行...
**小乌龟SVN(TortoiseSVN)代码管理详解** 小乌龟SVN是一款在Windows操作系统上广泛使用的Subversion(简称SVN)客户端工具,它为用户提供了一个直观易用的图形用户界面,便于管理和协作开发源代码。在软件开发...
### JIRA集成SVN配置详解 #### 一、前言 在软件开发流程中,问题追踪和版本控制是两个至关重要的环节。JIRA作为一款强大的问题追踪系统,而SVN(Subversion)则是一款广泛使用的版本控制系统。将两者进行集成,可以...
【Windows下SVN服务器配置详解】 Subversion (简称SVN) 是一款强大的版本控制系统,它在Windows环境下同样可以被高效地配置和使用。本指南将详细介绍如何在Windows上搭建SVN服务器,包括Apache HTTP Server的安装、...
SVN,全称为Subversion,是一款广泛应用于软件开发...在实际开发中,SVN还提供了更多的高级功能,如钩子脚本、访问控制等,以适应各种复杂的开发环境。了解和掌握SVN的基本操作,对于任何软件开发团队都是至关重要的。
### SVN配置管理详解 #### 一、概述 版本控制系统(Version Control System,VCS)是软件开发中不可或缺的一部分,它帮助团队有效地管理源代码的变化历史。Subversion(SVN)作为一款集中式的版本控制系统,被广泛...
### SVN主从搭建详解 #### 一、简介 在软件开发过程中,版本控制系统扮演着非常重要的角色。Subversion (SVN) 是一个广泛使用的集中式版本控制系统,它可以帮助团队管理和跟踪项目的变更历史。为了提高系统的可用...
文档详解部分,虽然格式可能不规范,但应包含了如何创建SVN仓库、设置用户和组权限、导入项目、客户端的日常操作流程等内容。这些基本操作包括: 1. 创建仓库:在服务端指定目录下使用svnadmin工具创建一个新的仓库...
#### 备份流程详解 本文主要介绍如何将运行在Linux系统上的SVN代码库备份到Windows系统上,并提供具体的操作步骤。 #### 步骤一:创建本地备份目录 首先,在Windows系统的指定位置创建一个用于存放备份的目录。例如...
### SVNsync配置库同步知识点详解 #### 一、SVNsync简介 SVNsync是一款用于Subversion(简称SVN)仓库之间同步的工具。它能够帮助用户实现从一个SVN仓库到另一个SVN仓库的数据复制,这对于需要在多个服务器之间...
**Linux SVN 搭建与使用详解** 在IT行业中,版本控制系统是开发团队协作不可或缺的工具,Subversion(简称SVN)就是其中一种广泛应用的集中式版本控制系统。本笔记主要针对Linux环境下如何安装、配置及使用SVN进行...
通过编写一个批处理脚本,并将其作为SVN钩子的一部分,当有新的提交时,该脚本将被自动触发,从而实现将更新的内容自动发布到指定的Web服务器上。 ##### 2. 脚本解析 - **环境变量设置**:首先定义了几个关键的...