版本控制工具svn钩子hook机制详解—实现检测提交代码功能

一、svn hook机制

svn的hook机制,跟其他很多类似的工具一样,hook机制的本身就是在某个具体的时机所触发的内容,类似于事件驱动的回调。

举个简单的例子,我们使用svn commit的时候如果希望对日志的信息进行判断,如果日志中没有包含指定格式的Ticket号时,提示相关的错误信息,不允许提交。这样的场景,就是hook机制起作用的最为常见的情形之一。这篇文章中会用最简单的方式来演示这个机制的设定和使用方式。

二、svn的hook模板

在创建的svn的仓库中,目前默认包含了如下9种hook的版本

    start-commit
    pre-commit
    post-commit
    pre-revprop-change
    post-revprop-change
    pre-lock
    post-lock
    pre-unlock
    post-unlock

在安装的apache的服务器中,可以查看模板。

[root@iZm5eetbb1qeqn5t6ynbyiZ svn]# ls
authz  passwd  test  touch
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]#
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]#
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]#
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]# cd test/
[root@iZm5eetbb1qeqn5t6ynbyiZ test]# ls
conf  dav  db  format  hooks  locks  README.txt
[root@iZm5eetbb1qeqn5t6ynbyiZ test]# cd hooks/
[root@iZm5eetbb1qeqn5t6ynbyiZ hooks]# ls
post-commit.tmpl  post-revprop-change.tmpl  pre-commit.tmpl  pre-revprop-change.tmpl  start-commit.tmpl
post-lock.tmpl    post-unlock.tmpl          pre-lock.tmpl    pre-unlock.tmpl
[root@iZm5eetbb1qeqn5t6ynbyiZ hooks]#

 

三、hook说明

svn 9种相关的hook所触发的时机相关的信息如下

四、hook参数

当前版本的hook的相关参数信息如下所示:

五、起效方式

缺省创建的库中的9个文件均以tmpl结尾,而这样是不起作用的,在Unix/Linux下,删除tmpl的后缀才能起作用,而windows则需要将.tmpl改成.bat。
修改之后立即起效,无需重新启动svn服务。

在pre-commit中主要做校验用到的命令是svnlook命令,看下svnlook命令

[root@iZm5eetbb1qeqn5t6ynbyiZ tmp]# /usr/bin/svnlook help
general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
Note: any subcommand which takes the '--revision' and '--transaction'
      options will, if invoked without one of those options, act on
      the repository's youngest revision.
Type 'svnlook help <subcommand>' for help on a specific subcommand.
Type 'svnlook --version' to see the program version and FS modules.

Available subcommands:
   author
   cat
   changed
   date
   diff
   dirs-changed
   filesize
   help (?, h)
   history
   info
   lock
   log
   propget (pget, pg)
   proplist (plist, pl)
   tree
   uuid
   youngest

 

5.1  Linux脚本实现检测代码中是否含有非法字符

首先执行以下命令

mv pre-commit.tmpl  pre-commit

chmod +x pre-commit
#!/bin/sh

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook

LOGMSG=`$SVNLOOK diff -t "$TXN" "$REPOS" | grep "error_log" | wc -L`
if [ "$LOGMSG" -ge 0 ];
then
  echo -e "commit error_log refused" 1>&2
  exit 1
fi

5.2 校验提交log字符数量

#!/bin/sh

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 5 ];
then
  echo -e "nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2
  exit 1
fi

 

————————————————
版权声明:本文为CSDN博主「liumiaocn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liumiaocn/article/details/81942161

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SVN(Subversion)是一个开源的版本控制系统,它可以帮助团队协同开发和管理项目代码。下面是SVN的使用介绍: 1. 安装SVN:首先,你需要下载并安装SVN客户端软件,例如TortoiseSVN(Windows平台)或者svn命令行工具(Linux平台)。 2. 创建版本库:在SVN中,项目的代码存储在一个称为版本库(Repository)的中央服务器上。你可以使用svnadmin命令创建一个新的版本库。 3. 检出代码:使用svn checkout命令将版本库中的代码复制到本地工作副本(Working Copy)中。这样你就可以在本地进行修改和提交。 4. 添加和提交文件:将你的代码文件添加到本地工作副本中,使用svn add命令。然后使用svn commit命令将修改后的文件提交版本库中。 5. 更新代码:使用svn update命令可以将版本库中其他人提交的最新代码更新到你的本地工作副本中。 6. 解决冲突:当多个人同时修改同一个文件时,可能会发生冲突。SVN会标记出冲突的文件,你需要手动解决冲突并提交修改。 7. 分支和合并:SVN支持创建分支和合并操作,可以方便地进行并行开发和代码版本管理。 8. 查看日志:使用svn log命令可以查看版本库中的提交日志,包括每个版本的修改记录和提交者信息。 9. 撤销修改:使用svn revert命令可以撤销对文件的修改,将文件恢复到最新的版本。 10. 标签和标记:SVN支持创建标签(Tag)来标记项目的重要里程碑或版本发布。标签是一个不可修改的副本,用于长期保存。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值