mysql 钩子_svn钩子的使用案例

svn钩子的使用案例

我在这一篇博文http://lidaxia.blog.51cto.com/11588738/1928773中提到,svn钩子脚本是svn非常实用重要的功能,在工作中,会经常需要用到svn钩子脚本以实现除了svn自带功能之外的附加功能,那么这一篇博文,我们就举例演示一下,svn钩子是用来做什么的,以及怎么用。

svn钩子的功能:

svn钩子是一个脚本,它的具体写法和linux操作系统中shell脚本的写法并没有什么不同,通俗来说,svn钩子的功能就是当某种版本库事件(删除文件、上传文件、修改文件名称等等)被触发,以脚本定义的方式继续该事件的执行。

钩子的类型:

常用的钩子脚本

钩子脚本说明

post-commit在提交完成成功创建版本之后执行该钩子,提交已经完成,不可更改,本脚本的返回值被忽略,提交完成时触发事件

pre-commit提交完成前触发执行该脚本

start-commit在客户端还没有向服务器提交数据之前,即还没有建立subversion transaction(缩写为txn)之前,执行该脚本(提交前触发事务)

非常用的钩子脚本

钩子脚本说明

pre-revprop-change在修改revision属性之前,执行该脚本

post-revprop-change在修改revision属性之后,执行该脚本,因为修改稿已经完成,不可更改,因此本脚本的返回值被忽略(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)

pre-unlock对文件进行解锁操作之前执行脚本

post-unlock对文件进行解锁操作之后执行脚本

pre-lock对文件进行加锁操作之前执行脚本

post-lock对文件进行教唆操作之后执行脚本

注意事项:

在使用svn钩子的时候,必须要在钩子脚本中设置好环境变量和命令的绝对路径,因为svn是在一个没有任何环境变量的环境中运行的,甚至都没有$PATH这个变量。

下面通过两个小实验来演示svn钩子的功能,搭建过程可以看我的这篇博文http://lidaxia.blog.51cto.com/11588738/1928773

hooks一般放置在如下目录,有许多的模板

fd99183906143269bae26626f616f174.png

第一个钩子:自动同步项目库文件到另外一台主机

从源码库下载一个项目库

[root@svn-server data]# svn co svn://192.168.83.131/dir /data

写一个钩子脚本

[root@svn-server hooks]# cat post-commit

#!/bin/bash

REPOS="$1"

REV="$2"

export LC_CTYPE="en_US.UTF-8"

export LC_ALL=

LOGPATH="/var/log"

[ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p

SVN=/usr/bin/svn

$SVN update --username lhx --password 1 /data/

if [ $? -eq 0 ]

then

/usr/bin/rsync -az --delete /data/ root@192.168.83.132:/tmp/

fi

赋予执行权限

[root@svn-server hooks]# chmod +x post-commit

配置免密码认证

[root@svn-server hooks]# ssh-keygen

[root@svn-server hooks]# ssh-copy-idroot@192.168.83.132

上传一个测试文件测试

9315c616065db27a2a718f5379f83c22.png

如果脚本有报错会直接在svn软件上显示出来

4cc78e88a763c3fb42575e0a9452b173.png

在client上验证是否已经同步文件

2f874b0bcc635c5792d25bab021f1c77.png

第二个钩子:限制文件大小以及文件的类型,上传需要输入备注

[root@svn-server hooks]# vim pre-commit

#!/bin/bash

REPOS="$1"

TXN="$2"

MAX_SIZE=10240000

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

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"error:can not be empty,you must enter at least 8 characters"1>&2

exit 1

fi

files=$($SVNLOOK changed -t $TXN $REPOS |awk '{print$2}')

for f in $files

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

#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)" >&2

exit 1

fi

done

#all checks passed,so allow commit

exit 0

赋予执行权限[root@svn-server hooks]# chmod +x pre-commit

测试

一开始没有输入备注

d7ad835564af446af0ba996629dab8c9.png

输入备注之后提示不允许的文件类型

df1fe2a1ec6e5cb3374ef8fada019655.png

更改文件类型并且输入备注,提示大小超出限制

0d5c9e0fb743c114e988c4c7e432599c.png

最近正在找工作,加上又在学习mysql,比较忙,博客更新慢,但是我的博文尽量力求里面的内容大家看到会有收获,而不是简单的把命令历史贴上去。喜欢交流技术的朋友可以私信我,留下qq,微信等联系方式,大家一起交流交流。

如有纰漏,欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SVN上传文件的大小没有固定的限制,但是在实际使用中,建议限制单个文件的大小不要超过100M,否则会对版本库的性能和稳定性产生影响。 如果需要限制上传文件的大小和类型,可以通过使用Svn钩子实现。Svn钩子是一种机制,可以在版本库中的特定事件发生时触发脚本或程序。通过Svn钩子,可以实现对提交文件的大小和类型进行限制。 具体实现方法如下: 1. 编写限制上传文件大小和类型的脚本或程序。 2. 将脚本或程序保存在版本库的hooks目录下,并将其命名为pre-commit。 3. 给pre-commit文件添加可执行权限。 4. 在pre-commit文件中添加代码,以调用限制上传文件大小和类型的脚本或程序。 例如,以下是一个限制上传文件大小和类型的Python脚本(需要安装Python3): ```python #!/usr/bin/env python3 import os import sys # 限制上传文件的大小为100M MAX_SIZE = 100 * 1024 * 1024 # 限制上传文件的类型为txt和md ALLOWED_TYPES = ['.txt', '.md'] def check_file_size(path): size = os.path.getsize(path) if size > MAX_SIZE: print('File size exceeds limit: %s' % path) return False return True def check_file_type(path): _, ext = os.path.splitext(path) if ext.lower() not in ALLOWED_TYPES: print('File type not allowed: %s' % path) return False return True def main(argv): for path in argv: if not check_file_size(path) or not check_file_type(path): sys.exit(1) if __name__ == '__main__': main(sys.argv[1:]) ``` 在pre-commit文件中添加以下代码: ```bash #!/bin/sh REPOS="$1" TXN="$2" python3 /path/to/your/script.py "$REPOS"/"$TXN"/changes exit 0 ``` 其中,/path/to/your/script.py为限制上传文件大小和类型的Python脚本的路径。 这样,当用户提交文件时,Svn钩子会先调用pre-commit文件,pre-commit文件会再调用限制上传文件大小和类型的Python脚本进行检查,如果文件大小或类型不符合要求,提交操作就会失败。 注意,在使用Svn钩子时,需要注意以下几点: - Svn钩子只在服务器端生效,不会在客户端生效。 - Svn钩子是通过调用脚本或程序实现的,因此需要确保脚本或程序能够正确地执行。 - Svn钩子只能限制提交操作,无法限制其他操作,如更新、删除等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值