前一段时间,李总让我研究一下SVN钩子的使用,以前没接触过这方面东西,在这里记录一下。

何为钩子?

所谓SVN钩子就是一些与版本库事件发生时触发的程序,例如新修订版本的创建,或者是未版本化属性的修改。目前subversion提供了如下几种钩子:post-commit、post-lock、post-revprop-change、post-unlock、pre-commit、pre-lock、pre-revprop-change、pre-unlock、start-commit

我们随便打开一个hooks目录,就可以看到:

利用钩子,实现限制上传文件的大小功能:

在仓库hooks目录下,编辑pre-commit脚本文件,内容如下:

#!/bin/bash
REPOS="$1" #仓库的路径
TXN="$2" #本次事务的一个事务号,如果提交成功则返回0,否则返回非0结果
SVNLOOK=/usr/bin/svnlook
MAX_SIZE=512000 #限制上传文件的大小 files=$($SVNLOOK changed -t $TXN $REPOS | awk '{print $2}') # check check
if [[ $files =~ "project_nuli" ]];then
for f in $files
do
# check file size
filesize=$($SVNLOOK cat -t $TXN $REPOS $f | wc -c)
if [ $filesize -gt $MAX_SIZE ] ; then
echo "File $f is too large (must <= $MAX_SIZE)" >> /dev/stderr
exit 1
fi
done
fi
exit 0

客户端提交大于500K文件会返回 File $f is too large (must <= $MAX_SIZE)

利用钩子,实现限制上传文件的类型:

在仓库hooks目录下,编辑pre-commit脚本文件,内容如下:

#!/bin/bash
REPOS="$1" #仓库的路径
TXN="$2" #本次事务的一个事务号,如果提交成功则返回0,否则返回非0结果
SVNLOOK=/usr/bin/svnlook
FILTER='\.(zip|rar|o|ibj|tar|gz)$' #限制扩展名 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
if echo $f |tr A-Z a-z|grep -Eq $FILTER;
then
echo "File $f is not allow ($FILTER) file" >&2
exit 1;
fi
done
exit 0

最后,等这段时间忙过去了,得去学学Shell脚本怎么写。

【SVN】关于钩子的一些使用的更多相关文章

  1. SVN配置钩子

    安装测试环境:109  CentOS4.6 安装: SVN1.32http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz安装:解压 ...

  2. 转:Windows下WSH/JS实现SVN服务器钩子脚本阻止提交空日志信息和垃圾文件

    http://blog.csdn.net/caikanxp/article/details/8279921 如何强制用户在提交SVN时填写日志信息? 如果用户使用的都是TortoiseSVN客户端,可 ...

  3. svn利用钩子脚本功能实现代码同步到web目录

    一.hook简单介绍 为了方便管理员控制提交的过程 ,Subversion提供了hook机制.当特定的 事件发生时,相应的 hook会被调用,hook其实就相当于特定事件的处理函数.每个hook会得到 ...

  4. Linux CentOS 搭建SVN并用钩子自动实现同步到Web目录

    linux安装配置SVN并设置钩子   安装说明 系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 检查已安装版本 # ...

  5. SVN设置钩子

    在post-commit 文件后增加两行: WEB_DIR="/data/www/wb.abc.cn/2.4" /usr/bin/svn update $WEB_DIR --use ...

  6. svn利用钩子实现代码同步到web目录

    思路:  找 到SVN Server中的仓库(Repositories)文件夹的位置,在相应的项目文件夹中找到hooks文件夹.在该文件夹中添加一个post- commit文件:当有commit动作发 ...

  7. svn利用钩子post-commit自动更新到线上测试服务器(测试中未验证)

    创建一个新的版本库: [root@centos03 svn]# pwd /home/svn [root@centos03 svn]# svnadmin create webtest [root@cen ...

  8. 分享SVN的钩子代码[借鉴学习]pre-commit-post 钩子

      #/bin/bash REPOS=$1 TXN=$2 export HOME=/ export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/us ...

  9. svn 设置钩子将代码同步到web目录下面

    首先:确定思路: 要在SVN服务中,找到仓库文件夹的位置,在相应的项目中找到hooks文件夹.在该文件中添加一个post-commit文件: 当有commit动作发生时(提交到SVN服务是就会执行这个 ...

  10. SVN设置钩子文件限制提交文件时必须填写更新日志

    进入相应SVN仓库hooks目录,编辑文件pre-commit #!/bin/sh # PRE-COMMIT HOOK## The pre-commit hook is invoked before ...

随机推荐

  1. 1.Django学习

    ##Django学习 一.创建项目 django-admin startproject myblog 二.项目目录 ##启动项目:manage.py runserver 如果创建应用需要将名称写在这里 ...

  2. IIS 错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    导致这种问题的原因是ASP.NET没有成功注册到IIS中,很有可能是先安装.Net Framework,然后安装IIS.为了避免此问题发生,要先安装IIS再安装.Net Framework. 解决方案 ...

  3. python自动化开发-[第十三天]-前端Css续

    今日概要: 1.伪类选择器 2.选择器优先级 3.vertical-align属性 4.backgroud属性 5.边框border属性 6.display属性 7.padding,margine(见 ...

  4. 关于SSM的小感悟

    这周用SSM框架写了个小项目,真是各种百度啊,最后总算是实现了个登陆功能.刚才一直在修改,想实现登陆进去可以对id进行搜索,出现搜索的整体数据,无奈,一直没能实现.所以就只能留到下周了,到时候会把这个 ...

  5. python并发编程(并发与并行,同步和异步,阻塞与非阻塞)

    最近在学python的网络编程,学了socket通信,并利用socket实现了一个具有用户验证功能,可以上传下载文件.可以实现命令行功能,创建和删除文件夹,可以实现的断点续传等功能的FTP服务器.但在 ...

  6. Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现!

    Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现! 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.集群启动顺序 1>. ...

  7. Openldap命令详解

    Openldap 客户端常用管理命令 1.ldapadd -x: 简答认证方式 -W: 不需要在命令上写密码 ldapapp -x -D "cn=Manager,dc=suixingpay, ...

  8. Docker记录-Docker部署记录

    1.Docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  9. mysql 常用的命令集合

    1.创建表 CREATE TABLE `cardPcitrue`( `id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT'编号', `cId` IN ...

  10. 前端面试题整理—HTTP篇

    1.常见的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器 POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用PO ...