`

Subversion的钩子脚本

阅读更多

转自: http://hi.baidu.com/gacmotor/item/694bb5d144c459bf33db90cc

 

钩子脚本的具体写法就是操作系统中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版本库本身)也要被同一个用户访问。换句话说,要注意潜在的访问控制问题,它可能会让你的钩子无法按照你的目的顺利执行

分享到:
评论

相关推荐

    SVN禁止删除和强制注释操作的钩子脚本

    在版本控制系统Subversion (SVN) 中,钩子脚本是一种强大的工具,允许管理员执行自定义操作或实施特定策略,如防止错误的提交操作。在本案例中,我们需要创建一个预提交(pre-commit)钩子脚本来实现两个功能:禁止...

    puppet-svn-hooks:用于处理 puppet 代码库的 svn 钩子脚本

    傀儡-svn-钩子Subversion 钩子脚本处理木偶代码存储库。许可证:麻省理工学院版权所有 (c) 2012 杰森汉考克 特此授予任何人免费获得本软件副本和相关文档文件(“软件”)的许可,不受限制地处理本软件,包括但不...

    SVN钩子脚本pre-commit实现删除权限控制

    ### SVN钩子脚本pre-commit实现删除权限控制 #### 一、引言 Subversion(SVN)是一款广泛使用的版本控制系统,在许多企业及个人开发者中备受青睐。SVN提供了强大的版本管理和协同工作能力,帮助团队高效地管理源...

    Linux钩子配置(SVN)

    - 创建钩子脚本 - 设置权限 - 测试钩子脚本 4. **Java项目中的SVN钩子应用** - SVN与Java项目的集成 - 使用JRebel进行热部署 5. **常见问题及解决方案** #### SVN (Subversion) 简介 Subversion(SVN)是一种...

    subversion-1.6.13.zip

    8. **钩子脚本**:Subversion 仓库支持自定义的服务器端钩子脚本,可以在提交、更新等操作前后执行自动化任务,如邮件通知、构建过程等。 在Subversion 1.6.13 版本中,开发者们可能关注的一些改进和修复包括性能...

    JIRA和Subversion的集成

    1. **配置SVN钩子**:在Subversion服务器上设置后端钩子脚本,确保每次提交时都会触发一个通知,将提交信息发送到JIRA。这可以通过编写一个脚本(如Python或Perl),并在`post-commit`钩子中执行该脚本来实现。 2. ...

    Subversion-1.8.8-1

    6. **钩子脚本**:服务器端的钩子脚本可以自定义操作,比如自动构建、邮件通知等。 Subversion的使用涉及到命令行界面或图形用户界面,后者通常更易于新手使用。在安装Subversion服务器后,需要配置仓库位置、访问...

    SVN限制删除和强制添加注释的hook脚本

    1. **环境变量设置**:`set Repos=%1`和`set TXN=%2`分别设置了仓库路径(`Repos`)和事务ID(`TXN`),这是钩子脚本中常用的操作。 2. **检查用户权限**:`svnlook author -t "%TXN%" "%Repos%" | findstr "%SCM%"`这...

    subversion for openSuse linux.rar

    - **钩子脚本**:可以自定义以在提交操作前后执行某些任务,如自动构建、代码审核或权限检查。 总之,Subversion是openSUSE Linux上一个强大的版本控制系统,提供了一套完善的工具集来管理项目文件的历史和协作。...

    subversion API

    同时,它支持设置权限、钩子脚本等高级功能,以实现对版本库的精细控制。 #### 2.2 版本控制操作 - **检出(Checkout)**:从版本库中获取最新版本到本地工作副本。 - **更新(Update)**:将远程仓库的变动同步到...

    Subversion使用简介

    - **钩子脚本**:Subversion支持预提交和后提交的钩子脚本,可用于自动化测试、构建或其他验证过程。 - **与其他工具集成**:Subversion可以与各种开发工具集成,如IDE(Eclipse, IntelliJ IDEA)、构建工具(Maven...

    使用Subversion进行版本控制 PDF中文版

    - **钩子(Hooks)**:这是一种自动化脚本,可以在Subversion的某些事件(如提交、更新等)触发时运行,常用于执行代码检查、自动部署等任务。 - **跨平台兼容性**:Subversion在Windows、Linux、Mac OS X等操作...

    Subversion权威指南.pdf 清晰中文完整版

    除了基本操作,本书还讲解了高级主题,如钩子脚本的编写,这些脚本可以在特定事件(如提交)发生时执行自定义任务,以实现自动化工作流。此外,还介绍了如何与其他工具(如IDE、构建系统)集成,提升开发效率。 总...

    Version.Control.With.Subversion.For.Subversion.1.6

    6. 基于钩子(Hooks)的自动化:通过服务器端的脚本钩子,可以实现提交前的验证、自动构建等操作。 四、最佳实践 1. 经常提交:频繁的小型提交比偶尔的大规模更改更容易跟踪和合并。 2. 分支策略:根据项目规模和...

    subversion客户端

    11. **钩子(Hooks)**:Subversion服务器上的脚本,用于在特定事件(如提交)发生时执行自定义逻辑。 TortoiseSVN的特性还包括强大的图形界面,提供右键菜单选项,易于使用的diff工具,以及与Visual Studio、Office...

    svn强制写日志hooks

    本文将深入探讨“svn强制写日志hooks”这一主题,它与Subversion的钩子脚本(hooks)密切相关,这些脚本允许在执行特定操作时执行自定义的服务器端逻辑,例如提交日志消息。 首先,了解“hooks”在svn中的作用至关...

    Subversion for Windows安装指南

    - 修改日志信息的方法: 使用钩子脚本来自定义或修改提交的日志信息。 #### 三、安装客户端TortoiseSVN - **安装步骤**: - 文件名示例: TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi - 安装后会在右键菜单中添加...

    subhooker:subHooker,一个漂亮且简单的 Subversion 钩子,它独立于平台且非常易于使用。 无需编写 perlvbspython 脚本即可启动和运行提交后的电子邮件

    subHooker 是一个无脚本的 pre-commit 和 post-commit 钩子包,它大大简化了 subversion post-commit 电子邮件消息的配置。 它不需要外部 Perl 脚本,也不需要外部邮件客户端。 subHooker 使用一个属性文件,只需...

    svn_subversion.rar

    3. **钩子脚本**:Subversion的服务器端可以设置预提交和后提交的钩子脚本,实现自动化任务,如代码质量检查、自动构建等。 4. **Web界面**:通过如VisualSVN Server或Trac等工具,Subversion可以与Web界面结合,...

Global site tag (gtag.js) - Google Analytics