先说说钩子是干什么的吧,,简单的说,svn钩子就是在提交svn时前后所要触发的事件,于是我们可以用钩子做一些提交时的限制,及提交后的操作。最常用的一般有两个,pre-commit,post-commit。下面分别简单说下概念。

一、钩子概述

1)start-commit — 开始提交的通知

描述
start-commit 在开始事务之前执行。通常用来确定用户是否有提交权限。
如果 start-commit 钩子程序返回非零值,提交就会在创建事务之前停止,stderr 的任何输出都会返回到客户端。

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.认证过的尝试提交的用户名
3.Colon-separated list of capabilities that a client passes to the server, including depth, mergeinfo, and log-revprops

2)pre-commit — 在提交结束之前提醒。

描述
pre-commit 钩子在事务创建新版本之前运行。通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个 bug 追踪的 ticket 号,或者是要求日志信息不为空)而不允许的提交。
如果 pre-commit 钩子返回非零值,提交会终止,提交事务被删除,所有 stderr 的输出会返回到客户端。

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.提交事务的名称

3)post-commit — 成功提交的通知。

描述
post-commit 钩子在事务完成,创建新版本后执行。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者用来提醒其它工具(例如问题跟踪),发生了提交动作。一些配置也使用这个钩子触发版本库的备份进程。

如果 post-commit 钩子返回非零值,提交不会终止,因为它已经完成。然后,所有 stderr 的输出都会返回到客户端,让诊断钩子的失败更容易。

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.提交创建的修订版本号

二、pre-commit钩子举例说明

1、此脚本会在提交前对事件进行检查

[root@CentOS_11 test]# cat /svndata/test/hooks/pre-commit
#!/bin/sh

REPOS="$1"
TXN="$2"
export LANG=en_US.UTF-8                                                           ; export LC_CTYPE=en_US.UTF-8 #设置本地字符集编码
MAX_SIZE=5242880000
FILTER='\.()$'
SVNLOOK=/usr/bin/svnlook
AUTHORS='(tao|wang)'

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" |wc -c`                     ;  判断输入log的最小字符,小于10个不让提交
if [ $LOGMSG -lt 10 ];then
echo -e "log message can't be empty or less 9 chars as commit!" >&2
exit 1
fi
SVNUSER=`$SVNLOOK author -t "$TXN" "$REPOS"`                        ;  限制提交用户,不是脚本定义的用户不让提交,不过基本svn权限配置文件就够了。
if echo $SVNUSER |/bin/grep -vEq $AUTHORS ;then
echo -e "Sorry you no be author" >&2
exit 1
fi

#定义过滤出当前提交的所以文件内容

File=$($SVNLOOK changed -t $TXN $REPOS|cut -d " " -f 4-)            ;  限制提交文件的类型

#对当前提交的所有文件进行循环

echo "$File" |while read f;do

#如果文件被过滤出来就则匹配,输出不允许提交。

if echo $f |tr A-Z a-z|grep -Eq $FILTER;then

echo "File $f is not allow $FILTER file" >&2
exit 1
fi
FilesSize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" |wc -c`              ; 限制单个文件提交的大小
if [ "$FilesSize" -gt "$MAX_SIZE" ];then
echo "File $f is too large(must <=$MAX_SIZE)B" >&2
exit 1
fi
done

======================

提示:将以上脚本放到版本库的hooks下,并给执行权限,将提交时如果有符合以上限制,将限制提交。这里就不作测试,可自行测试,很简单。

======================

二、post-commit钩子举例说明

post-commit是在提交后进行的操作事件,用这个我们可以实现两个SVN服务器的时时同步,保持版本库的最新,或一些其他的方案,这里我只提供时时同步脚本。

环境:两台SVN服务器,版本库全部相同。并且两台配置SSH无密钥登陆。

说明:这里只在一台SVN上操作,另一台操作完全一样。

脚本原理:

1)先通过ssh远程执行无端SVN服务器中svn版本库的版本号和当前SVN服务器SVN版本库的版本号做对比。

2)对比完后,当前的SVN版本库最新大于远端SVN版本号,并通过svnadmin做增量备份。

3)备份完再通过ssh传到远端SVN服务器上,将增量备份进行还原操作

下面的脚本只是简单的实现,并未做完善,大家可以自己写更好的脚本实现,这里只是说明一个思路而已。

[root@CentOS_11 test]# cat /svndata/test/hooks/post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
SVNLOOK=/usr/bin/svnlook
R_ID=`/usr/bin/ssh root@192.168.1.12 "$SVNLOOK youngest /svndata/test/"`
L_ID=`$SVNLOOK youngest $REPOS`
[ "$R_ID" -eq "$L_ID" ] && {
echo "The ID is neweast!!" >>/root/a.log
}
[ "$R_ID" -gt "$L_ID" ] && {
echo "Warning The R_ID is Biger than L_ID" >>/root/a.log
}
[ "$R_ID" -lt "$L_ID" ] && {

R_ID_1=$((${R_ID}+1))
sleep 1
/usr/bin/svnadmin dump --incremental -r ${R_ID_1}:${L_ID} /svndata/test >/root/svn_inter_bak/test_${R_ID_1}:${L_ID}
[ $? -ne 0 ] && {
echo "bakcup test dump failed" >>/root/a.log
}||{
echo "test dump is OK" >>$LOGS/a.log
sleep 1
}
/usr/bin/scp /root/svn_inter_bak/test_${R_ID_1}:${L_ID} root@192.168.1.12:/root/svn_inter_dir/
[ $? -eq 0 ] && {
# /usr/bin/ssh root@192.168.1.12 "/bin/sh /root/svn_inter_restore.sh"
ssh root@192.168.1.12 "/usr/bin/svnadmin load /svndata/test < /root/svn_inter_dir/*"
ssh root@192.168.1.12 "/bin/rm -f /root/svn_inter_dir/*"
}||{
echo "warning..scp remote is failed" >>/root/a.log
}
}

=================================================

SVN-钩子的更多相关文章

  1. svn钩子(hooks)

    首先你需要搭建出自己的svn环境出来,并能成功导入导出,并且了解svn,这是看这篇文章的前提.... 出于公司开发部需要svn同步更新服务器代码,需要用到svn钩子(hooks)技术,以前从来没听过, ...

  2. 钉钉自定义机器人配合SVN钩子事件进行消息的推送实践

    目前很多公司还是使用SVN(TortoiseSVN)进行版本控制,使用简单,适合管理一般项目.协同办公软件目前钉钉比较成熟,阿里也一直在宣传推广,这两年公司也在使用,主要用于信息的沟通,其它的绩效.考 ...

  3. 使用svn钩子遇到的坑

    1.svn钩子(hooks)自动部署代码到web目录(以前公司用,很好奇怎么做的,折腾了两天,掉进了坑里)共勉!!! web目录:/home/www/xiaokai svn版本库目录:/svn/xia ...

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

    由于项目需要,svn提交后的代码希望再测试服务器上测试,每次提交后还要手动去svn update一次 十分麻烦,配置好svn钩子以后就省去了这些麻烦. 进入svn版本库目录找到hooks目录找到文件p ...

  5. 使用python编写svn钩子

    同上一篇trac中安装插件的文章的出发点一样,感觉用文档和口头制定规则在执行上会有偏差并且需要经常引导新人去熟悉规则. 所以,又费了几个小时去琢磨怎么改进svn提交代码的钩子,现有的钩子的功能比较简单 ...

  6. 使用SVN钩子强制提交日志和限制提交文件类型

    Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...

  7. svn钩子(hooks)自动部署代码到web目录

      版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/li956732806/article/details/71158869   web目录:/hoe ...

  8. centos 6.8 设置svn钩子同步至web目录

    1.在web目录创建项目目录 mkdir ./opt/wwwroot/项目名称 2.使用svn检出项目文件 svn checkout svn://localhost:/项目名称 3.设置svn库中钩子 ...

  9. svn 钩子应用 - svn 提交字符限制, 不能为空

    一.版本库钩子 1.1 start-commit  开始提交的通知 输入参数:传递给你钩子程序的命令行参数,顺序如下: 1.  版本库路径 2.  认证过的尝试提交的用户名 3.  Depth,mer ...

  10. SVN 钩子 同步测试服务器

    http://blog.csdn.net/showso2006/article/details/6750441 多人开始使用subversion之后,就想着,要建立一个测试用的服务器,不需要把文件up ...

随机推荐

  1. iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

    首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下: 往viewController.xib文件里拖动一个imageView,并使覆盖整个 ...

  2. UVA 10779 Collectors Problem(最大流)

    这个题是很难往网络流上面构思的... 从s向每个物品增加容量为Bob拥有数的弧,然后从每个物品向t增加容量为1的弧(代表种类个数).这时候跑最大流的话,得到的肯定是Bob拥有的初始种类数.那么交换后的 ...

  3. 委托学习续:Action、Func和Predicate

    我们先看一个上一章的委托的例子: using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  4. C++学习笔记(五):指针和引用

    声明指针: //指针声明 * 号左右的空格是可选的,下面的定义都是正确的 int *pointer1; int* pointer2; int*pointer3; int * pointer4; //注 ...

  5. Oracle中的AS和IS

    Oracle中的AS和IS是ORACLE为了方便而设置的同义词基本上没有不同 . 使用规则: 1.在创建存储过程(PROCEDURE)/函数(FUNCTION),以及自定义类型(TPYE)和包(PAC ...

  6. 解决 mac ssh空闲 连接断开问题

    想必大家都知道,用终端 ssh 连接服务器,如果长时间没有操作,会被断开连接. 要用的话又得重新登录,这非常不方便,也影响开发效率.那针对这种情况,有没有解决方法呢? 答案是肯定的.理论上,有两种方案 ...

  7. ASP.NET 学习的总结

    应用程序域 使用.Net建立的可执行程序*.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.应用程序域是.Net引入的一个新概念,它比进程所占用的资源要少,可以被看做 ...

  8. Codeforces Round #325 (Div. 2) D. Phillip and Trains BFS

    D. Phillip and Trains Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/586/ ...

  9. WINAPI 变量(2861个)

    WINAPI 变量(2861个)   这是从 c:\Program Files\Windows Kits\8.1\Include\um\WinUser.h 这个文件 中提取的 CTRL+F 查看变量所 ...

  10. SQL Server查询所有用户表

    select name from sysobjects where xtype='u' order by name