Sivo 悉见

SVN钩子使用方法详解

匿名 · 更新于 2015/1/14

 Subversion钩子(hooks)  
关于subversion服务器端钩子的介绍:  
我们经常提到的svn hooks(钩子)是一组“外挂”脚本程序, 是svn提供的一组由svn事件触发的特别有用的程序。 这些程序在服务器端执行,可以提供svn之外的一些附加功能。  钩子可以调用批处理文件、可执行文件或者一些类似于perl、python等的脚本。
svn服务端有9种钩子,
分别是:
A. 关于锁定的2种  
   a1. pre-lock
   a2. post-lock
B. 关于解锁的2种  
   b1. pre-unlock
   b2. post-unlock
C. 关于提交的3种  
   c1. start-commit
   c2. pre-commit
   c3. post-commit
D. 关于属性的2种  
   d1. pre-revprop-change
   d2. post-revprop-change  
在Svn的仓库目录D:\svn\hooks下面,默认有9种钩子的模板文件: 

这些钩子模板文件的后缀是tmpl,文件内容可以用一般的文本编辑器进行修改。 如果我们在window2003的svn服务端要实现某种的钩子, 只要修改对应的钩子模板文件内容,加入自己的代码,  然后将文件另存为同名但后缀为bat的可执行批处理文件即可。

 
在本文中,我们主要介绍两个最常用的钩子及应用: 
利用pre-commit钩子实现svn提交日志说明不能为空,至少10个字符
利用post-commit钩子实现svn提交修改代码实时同步到web服务器 
 

  1. 利用pre-commit钩子实现svn提交日志长短检查 
    避免开发人员对于提交的更改不添加任何说明或注释, 
    要求开发人员对于每一次的提交修改都要作出必要的说明或注释, 说明或注释的文字不能少于10个字符。  
    在Svn的仓库目录D:\svn\hooks下面创建钩子文件:pre-commit.bat 文件内容如下所示: 



     
    在本文中,我们主要介绍两个最常用的钩子及应用: 
     利用pre-commit钩子实现svn提交日志说明不能为空,至少10个字符  利用post-commit钩子实现svn提交修改代码实时同步到web服务器 
     
  2. 利用pre-commit钩子实现svn提交日志长短检查 
    避免开发人员对于提交的更改不添加任何说明或注释, 
    要求开发人员对于每一次的提交修改都要作出必要的说明或注释, 说明或注释的文字不能少于10个字符。  
    在Svn的仓库目录D:\svn\hooks下面创建钩子文件:pre-commit.bat 文件内容如下所示: 
     
     
  3. 利用post-commit钩子实现svn提交修改代码实时同步到web服务器 
    对于一般的中小型开发团队,很多时候, 
    既在window2003中搭建有web测试服务器,用于开发演示及功能测试, 又在其上建立svn代码仓库,用于开发小组的代码维护及开发。  
    在这种情况下,我们会希望 —— 
    如果开发人员在svn中提交或更新了新的代码, 
    svn的服务端能够实时将更新后的内容同步到web环境中, ok,这个实现很简单!

    假定我们web测试服务器的代码目录为D:\www 
    首先我们需要用svn对web的D:\www目录checkout初始化一次:

    在Svn的仓库目录D:\svn\hooks下面创建钩子文件:post-commit.bat
    文件内容如下所示:
@echo off
SET REPOS="%1"
SET TXN="%2"

"C:\Program Files\Subversion\bin\svn.exe" update "D:\www" --quiet --username www --password wwwpassword



最后两行内容是一条语句,不能断行。