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

上传人:第*** 文档编号:34048336 上传时间:2018-02-20 格式:DOCX 页数:5 大小:49KB
返回 下载 相关 举报
svn使用钩子强制提交日志和限制提交文件类型_第1页
第1页 / 共5页
svn使用钩子强制提交日志和限制提交文件类型_第2页
第2页 / 共5页
svn使用钩子强制提交日志和限制提交文件类型_第3页
第3页 / 共5页
svn使用钩子强制提交日志和限制提交文件类型_第4页
第4页 / 共5页
svn使用钩子强制提交日志和限制提交文件类型_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《svn使用钩子强制提交日志和限制提交文件类型》由会员分享,可在线阅读,更多相关《svn使用钩子强制提交日志和限制提交文件类型(5页珍藏版)》请在金锄头文库上搜索。

1、SVN 使用钩子强制提交日志和限制提交文件类型Subversion 本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能。所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在 Subversion 里有很多。那么 SVN 的钩子有哪些呢?下面简单介绍下:【服务器钩子】1)锁定的 2 种pre-lock钩子在每次有人尝试锁定文件时执行。可以防止完全锁定,或者用来创建控制哪些用户可以锁定哪些路径的复杂策略。如果钩子发现已存在锁,也可以决定是否允许用户“窃取”这个锁。post-lock在路径锁定后执行。通常用来发送锁定事件邮件通知。2)解锁的 2 种

2、pre-unlock钩子在某人企图删除一个文件上的钩子时发生。可以用来创建哪些用户可以解锁哪些文件的策略。制定解锁策略非常重要。如果用户 A 锁定了一个文件,允许用户B 打开这个锁?如果这个锁已经一周了呢?这种事情可以通过钩子决定并强制执行。post-unlock在一个或多个路径已经被解锁后执行。通常用来发送解锁事件通知邮件。3)提交的 3 种start-commit它在提交事务产生前已运行,通常用来判定一个用户是否有权提交。版本库传给该程序两个参数:到版本库的路径,和要进行提交的用户名。如果程序返回一个非零值,会在事务产生前停止该提交操作。如果钩子程序要在 stderr 中写入数据,它将排队

3、送至客户端。pre-commit在事务完成提交之前运行,通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个 bug 追踪的 ticket 号,或者是要求日志信息不为空)而不允许的提交。版本库传递两个参数到程序:版本库的路径和正在提交的事务名称,如果程序返回非零值,提交会失败,事务也会删除。如 果钩子程序在stderr 中写入了数据,也会传递到客户端。post-commit它在事务完成后运行,创建一个新的修订版本。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者作为版本库的备份。版本库传给程序两个参数:到版本库的路径和被创建的新的修订版本号。退出程序会被

4、忽略。4)属性的 2 种pre-revprop-change因为 Subversion 的修订版本属性不是版本化的,对这类属性的修改(例如提交日志属性 svn:log)将会永久覆盖以前的属性值。因为数据在此可能 丢失,所以Subversion 提供了这种钩子(及与之对应的 post-revprop-change) ,因此版本库管理员可用一些外部方法记录变化。作 为对丢失未版本化属性数据的防范, Subversion客户端不能远程修改修订版本属性,除非为你的版本库实现这个钩子。post-revprop-change这个钩子与 pre-revprop-change 对应。事实上,因为多疑的原因,只

5、有存在 pre-revprop-change 时这个脚本才会执行。当这 两个钩子都存在时,post-revprop-change 在修订版本属性被改变之后运行,通常用来发送包含新属性的 email。版本库传递四个参数给该 钩子:到版本库的路径,属性存在的修订版本,经过校验的产生变化的用户名,和属性自身的名字。【客户端钩子】1)提交的start commit hookpre-commit hookpost-commit hook2)更新的start update hookpre-update hookpost-update hook如何使用 SVN 钩子强制提交日志和限制提交文件类型,需用到的是

6、服务端钩子 pre-commit,编写 pre-commit.bat 脚本如下:echo onrem SVN 强制写注释的 hooks 脚本(Windows) rem 文件名是: pre-commit.bat,放到 repository/hooks 目录下 setlocal set SVN_BINDIR=C:Program Files (x86)VisualSVN Serverbin set REPOS=%1set TXN=%2cd %SVN_BINDIR%rem 检查是否提交日志 svnlook.exe log -t %TXN% %REPOS% | findstr . nul if %err

7、orlevel% gtr 0 goto nolog rem 过滤文件类型 svnlook changed -t %TXN% %REPOS% | findstr class$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr obj$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr pdb$ if %errorlevel% EQU 0 (goto SuffixE

8、rror) svnlook changed -t %TXN% %REPOS% | findstr idb$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr manifest$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr pch$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TX

9、N% %REPOS% | findstr res$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr exp$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr ilk$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr dep$ if %err

10、orlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr user$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr suo$ if %errorlevel% EQU 0 (goto SuffixError) svnlook changed -t %TXN% %REPOS% | findstr ncb$ if %errorlevel% EQU 0 (goto SuffixError

11、) svnlook changed -t %TXN% %REPOS% | findstr aps$ if %errorlevel% EQU 0 (goto SuffixError) exit 0 :SuffixError echo 请不要提交受限制的文件类型,如:class、obj、pdb、exp、ilk 等等,谢谢! 1&2 exit 1 :nolog echo 日志(Message)是跟踪文档的重要信息,必须输入,不得输入无意义字符,长度不得小于 10 个字符。 1&2 exit 1 代码文件: pre-commit.bat简单说明下:SVN_BINDIR 路径为你的 SVN 服务端程序所在的目录,svnlook changed -t %TXN% %REPOS% | findstr class$为比较你提交的文件是否为 class 文件(即后缀是否为 class) 。 【部署方式】将上面的批处理代码保存在 pre-commit.bat(必须是这个名字) ,然后把它放到服务端的版本库的 hooks 文件夹下(如下图) ,放入后无需重启 SVN 服务。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号