SVN钩子运用

一、Svn钩子脚本简介

钩子脚本的具体写法就是操作系统shell脚本程序写法,请根据自己SVN所在的操作系统和shell程序进行相应的开发。

钩子脚本就是被某些版本库事件触发的程序,例如创建新版本或修改未被版本控制的属性。每个钩子都能掌管足够的信息来了解发生了什么事件,操作对象是什么以及触发事件用户的账号。根据钩子的输出或者返回状态,钩子程序能够以某种方式控制该动作继续执行,停止或者挂起。

svn的hooks模版功能介绍

start-commit 提交前触发事务

pre-commit 提交完成前触发事务

post-commit 提交完成时触发事务

pre-revprop-change 版本属性修改前触发事务

post-revprop-change 版本属性修改后触发事务

post-commit

在提交完成,成功创建版本之后执行该钩子,提交已经完成,不可更改,因此脚本返回值被忽略

post-lock

对文件进行加锁操作之后执行该脚本

post-revprop-change

在修改revision属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此本脚本的返回值被饭忽略

(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)

post-unlock

对文件进行解锁操作之后执行该脚本

pre-commit

在Subversion transaction完毕之后,在提交之前,执行该脚本

pre-revprop-change

在修改revision属性之前,执行该脚本

start-commit

对客户端还没有向服务器提交数据之前,即还没有建立Subversion transaction(缩写txn)之前,执行该脚本

默认情况下,钩子的子目录中包含各种版本库钩子模板

[[email protected] ~]# ls -l /application/svndata/sadoc/hooks/

总用量 36

-rw-r--r-- 1 root root 1977 6月  15 16:42 post-commit.tmpl

-rw-r--r-- 1 root root 1638 6月  15 16:42 post-lock.tmpl

-rw-r--r-- 1 root root 2289 6月  15 16:42 post-revprop-change.tmpl

-rw-r--r-- 1 root root 1567 6月  15 16:42 post-unlock.tmpl

-rw-r--r-- 1 root root 3426 6月  15 16:42 pre-commit.tmpl

-rw-r--r-- 1 root root 2410 6月  15 16:42 pre-lock.tmpl

-rw-r--r-- 1 root root 2786 6月  15 16:42 pre-revprop-change.tmpl

-rw-r--r-- 1 root root 2100 6月  15 16:42 pre-unlock.tmpl

-rw-r--r-- 1 root root 2780 6月  15 16:42 start-commit.tmpl

[[email protected] hooks]# cp post-commit.tmpl post-commit

[[email protected] hooks]# vim post-commit

REPOS="$1"

REV="$2"

mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

touch /tmp/$(date +%MS).log

[[email protected] hooks]# chmod 755 post-commit

二、在客户端下

在D:\oldboy\trunk\test\tom.txt

四、在返回svn服务器

提交完成,触发程序,在/tmp下多了日志文件

[[email protected] hooks]# ll -lrt /tmp

总用量 16

drwx------. 2 root root 16384 4月  24 17:56 lost+found

-rw-r--r--  1 root root     0 6月  16 11:04 04S.log

-rw-r--r--  1 root root     0 6月  16 11:04 0452.log

-rw-r--r--  1 root root     0 6月  16 11:06 0644.log

-rw-r--r--  1 root root     0 6月  16 11:12 1224.log

-rw-r--r--  1 root root     0 6月  16 11:15 1548.log

五、钩子脚本post-commit

REPOS="$1"

TXN="$2"

#此处更改大小限制,这里是5M

MAX_SIZE=5242880

#此处增加限制文件后比缀名

FILTER=‘\.(zip|rar|o|obj|tar|gz)$‘

#Make sure that the log message contains some test

SVNLOOK=/usr/bin/svnlook

#LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c`

if [ "$LOGMSG" -lt 9 ];

then

echo -e "nLog message cann‘t be empty! you must input more than 8 chars as comment!." 1>&2

exit 1

fi

files=$($SVNLOOK changed -t $TXN $REPOS |cut -d "" -f 4-)

#echo "$files">&2

#echo "$r">&2

#exit 1

rc=0

echo "$files" | while read f;

do

#check file type

filesize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" | wc -c `

if [ "filezie" -gt "$MAX_SIZE" ];

then

echo "File $f is too large(must <+$MAX_SIZE)B" >&2

exit 1

fi

done

#All checks passed,so allow the commit.

if [ $? -eq 1 ];

then

exit 1

else

exit 0

fi

时间: 2024-10-15 19:40:00

SVN钩子运用的相关文章

svn 钩子脚本

#vim post-commit #!/bin/bash REPOS="$1"  REV="$2"  SVNLOOK="/usr/bin/svnlook" echo "`date +%F`" >> /tmp/post.log echo "REPOS=$1 REV=$2" >> /tmp/post.log echo -e "\[email protected][email p

svn钩子的使用案例

我在这一篇博文http://lidaxia.blog.51cto.com/11588738/1928773中提到,svn钩子脚本是svn非常实用重要的功能,在工作中,会经常需要用到svn钩子脚本以实现除了svn自带功能之外的附加功能,那么这一篇博文,我们就举例演示一下,svn钩子是用来做什么的,以及怎么用. svn钩子的功能: svn钩子是一个脚本,它的具体写法和linux操作系统中shell脚本的写法并没有什么不同,通俗来说,svn钩子的功能就是当某种版本库事件(删除文件.上传文件.修改文件名

利用SVN钩子同步程序注意事项

暂时记下,此文章内容稍后验证. 前言:其实利用SVN实时同步到WEB服务器即时展现出来的文章已经到处都是,但是我在做的时候 还是有不少的小问题,很多文章也没有提出来过,还有同步也是,我还是记录下自己做过的尤其是一些细节,时间一长又会忘掉了. 同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上. 知识点:1.SVN的ho

svn学习之一(svn独立服务器搭建)svn钩子了解

SVN实战笔记#####################################################xingxing qq:1218761836 qq群:150181442##################################################### SVN实战  目录SVN实战    1一.SVN简介    1二.SVN运行方式    12.1 svn的访问模式3种    1三.SVN数据格式    23.1 svn 档案库数据格式    2四.

使用SVN钩子运行PHP更新服务器代码的注意事项

想通过本地提交代码到SVN服务器,同时同步测试服务器的代码 使用SVN钩子,运行服务器的php文件 代码如下: <?php header("Content-Type: text/html; charset=utf-8"); header("Cache-Control:no-cache,must-revalidate"); $username = '用户名'; $password = '密码'; $target_dir = '路径'; exec("su

svn钩子自动化同步代码提交任务

##############################################################第一种方式:svn服务端  也是rsync的客户端web        是rsync的服务端svn服务端执行:[[email protected] ~]#sh yum-svn02.sh[[email protected] ~]#mkdir /var/www/bbs -p[[email protected] ~]#svn checkout http://192.168.13.

svn钩子(hooks)

首先你需要搭建出自己的svn环境出来,并能成功导入导出,并且了解svn,这是看这篇文章的前提.... 出于公司开发部需要svn同步更新服务器代码,需要用到svn钩子(hooks)技术,以前从来没听过,没办法只能google了,google半天再一次认同了一个道理:天下文章一大抄啊,东拼西凑终于算是完成了(为啥说算是呢?svn太强大了我所做的只是一点点),不多说了,上例子: 我们公司的部署很简单(svn服务和web服务在同一台主机上): 开发 ----- svn(存储)---- 线上服务器 以前是

svn+钩子程序+rsync 自动化同步代码

svn+钩子程序+rsync 自动化同步代码实验环境如下:     IP地址            服务器功能             路径                           同步机制192.168.3.206          svn               svn路径:/data/svn                 rsync客户端192.168.3.210          代码服务器        代码目录:/data/html               rs

使用svn钩子脚本控制svn库的实时备份

Svn镜像库实时同步实现 一, 配置rsync的同步机制先实现能手动同步 环境:svn源码库 192.168.115.120 Svn镜像库 192.168.115.121 1,在源码库中配置rsync服务 (配置文件默认没有需要手动建立 /etc/rsyncd.cong) 上面 [ UGOR]就是要更新的模块,然后启动服务 rsync –deamo查看服务状态lsof –I 873 注:认证账户格式为 用户:密码,文件权限为 600, (rsync.pass) 2,在镜像库中同步内容执行 rsy

centos7配置svn钩子hooks脚本自动同步代码到项目目录

由于项目需要,svn提交后的代码希望再测试服务器上测试,每次提交后还要手动去svn update一次 十分麻烦,配置好svn钩子以后就省去了这些麻烦. 进入svn版本库目录找到hooks目录找到文件post-commit.tmpl 复制出一个命名为post-commit的文件,并修改权限为可执行权限 命令如下: cd /var/data/svndata/myproject/hooks cp post-commit.tmpl post-commit chmod 755 post-commit vi