svn钩子(hooks)。

首先你需要搭建出自己的svn环境出来,并能成功导入导出,并且了解svn,这是看这篇文章的前提....  

     出于公司开发部需要svn同步更新服务器代码,需要用到svn钩子(hooks)技术,以前从来没听过,没办法只能google了,google半天再一次认同了一个道理:天下文章一大抄啊,东拼西凑终于算是完成了(为啥说算是呢?svn太强大了我所做的只是一点点),不多说了,上例子:

我们公司的部署很简单(svn服务和web服务在同一台主机上):

开发 ----- svn(存储)---- 线上服务器

以前是这样(没有用到hooks时):

开发部commit一个文件,线上服务的web文档并不同步,而是需要在svn服务上执行

svn update命令后才能同步。

现在是这样(用到hooks后):

开发部commit一个文件,线上服务(web目录)同步数据,不需要svn update命令了,这样就减少了中间的一个小繁琐,别看这只是一个小动作但是省了一大麻烦(对于web开发工程师来说尤其这样,你想啊,代码经常改,还得经常svn update,总是一件事来回来回,烦不烦啊,是吧!)

我们需要同步的网站目录是(当然之前在svn服务器上已经存有assets目录文件了):

这样就先在webdir目录下建立一个assets目录(记得切换到webdir目录下),并运行


运行完这条命令后在webdir下面就检出了svn服务器上的assets目录了(里面有网站文件),这样做就相当于把web目录做成客户端目录了;

那么怎么利用hooks实现数据同步呢?接下来

看到了绿色文件了吗?!这里面其实就是一个shell脚本:

其中的DIR变量存着需要同步的目录,利用svn update命令加上用户名、密码就能同步了(我做的也就只能这么简单,莫怪兄弟啊!),主要看上幅图,有很多.tmpl结尾的文件,这些就是hooks模板了,post-commit这个文件名不要更改(需要给它执行权限)

经过这几步后,不需要手动执行这个post-commit脚本就可以完成开发部所需要的要求了!

为什么这样呢?套用网上的话(我也抄了,sorry啊!):

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

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

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

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

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

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

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

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

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

具体到我们的应用场景,我们要实现一个同步的测试服务器,我们只需要在一个用户执行完毕一个commit提交操作之后,让钩子程序去自动更新测试服务器的文件即可!


附上我所做的svn目录介绍:

192.168.1.20就是我们公司内部服务器了(svn+web),svn的根目录就是svndate(svndate就是版本目录了,直接用svn客户端访问192.168.1.20就行)

他的auth文件是(这样就能看出来svndate就是根目录了,注意document目录,前面的图里面出现过):

生产应用场景举例

pre-commit:限制上传文件扩展名及大小,控制提交要输入的信息等。

post-commit:svn更新自动通知,MSN,有减和短信通知;SVN更新触发checkout程序,然后实时rsync推送到服务器等。

转载:https://www.cnblogs.com/tdalcn/p/3886534.html

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、付费专栏及课程。

余额充值