网站cms是什么,网站开发使用软件有哪些,做二手房产网站多少钱,检察院网站建设方案先说说钩子是干什么的吧#xff0c;#xff0c;简单的说#xff0c;svn钩子就是在提交svn时前后所要触发的事件#xff0c;于是我们可以用钩子做一些提交时的限制#xff0c;及提交后的操作。最常用的一般有两个#xff0c;pre-commit,post-commit。下面分别简单说下概念… 先说说钩子是干什么的吧简单的说svn钩子就是在提交svn时前后所要触发的事件于是我们可以用钩子做一些提交时的限制及提交后的操作。最常用的一般有两个pre-commit,post-commit。下面分别简单说下概念。 一、钩子概述 1)start-commit — 开始提交的通知 描述start-commit 在开始事务之前执行。通常用来确定用户是否有提交权限。如果 start-commit 钩子程序返回非零值提交就会在创建事务之前停止stderr 的任何输出都会返回到客户端。 输入参数传递给你钩子程序的命令行参数按照顺序是 1.版本库路径2.认证过的尝试提交的用户名3.Colon-separated list of capabilities that a client passes to the server, including depth, mergeinfo, and log-revprops 2)pre-commit — 在提交结束之前提醒。 描述pre-commit 钩子在事务创建新版本之前运行。通常这个钩子是用来保护因为内容或位置(例如你要求所有到一个特定分支的提交必须包括一个 bug 追踪的 ticket 号或者是要求日志信息不为空)而不允许的提交。如果 pre-commit 钩子返回非零值提交会终止提交事务被删除所有 stderr 的输出会返回到客户端。 输入参数传递给你钩子程序的命令行参数按照顺序是 1.版本库路径2.提交事务的名称 3)post-commit — 成功提交的通知。 描述post-commit 钩子在事务完成创建新版本后执行。大多数人用这个钩子来发送关于提交的描述性电子邮件或者用来提醒其它工具(例如问题跟踪)发生了提交动作。一些配置也使用这个钩子触发版本库的备份进程。 如果 post-commit 钩子返回非零值提交不会终止因为它已经完成。然后所有 stderr 的输出都会返回到客户端让诊断钩子的失败更容易。 输入参数传递给你钩子程序的命令行参数按照顺序是 1.版本库路径2.提交创建的修订版本号 二、pre-commit钩子举例说明 1、此脚本会在提交前对事件进行检查 [rootCentOS_11 test]# cat /svndata/test/hooks/pre-commit #!/bin/sh REPOS$1TXN$2export LANGen_US.UTF-8 ; export LC_CTYPEen_US.UTF-8 #设置本地字符集编码MAX_SIZE5242880000FILTER\.()$SVNLOOK/usr/bin/svnlookAUTHORS(tao|wang) LOGMSG$SVNLOOK log -t $TXN $REPOS |wc -c ; 判断输入log的最小字符小于10个不让提交 if [ $LOGMSG -lt 10 ];then echo -e log message cant be empty or less 9 chars as commit! 2 exit 1 fiSVNUSER$SVNLOOK author -t $TXN $REPOS ; 限制提交用户不是脚本定义的用户不让提交不过基本svn权限配置文件就够了。 if echo $SVNUSER |/bin/grep -vEq $AUTHORS ;then echo -e Sorry you no be author 2 exit 1 fi #定义过滤出当前提交的所以文件内容 File$($SVNLOOK changed -t $TXN $REPOS|cut -d -f 4-) ; 限制提交文件的类型 #对当前提交的所有文件进行循环 echo $File |while read f;do #如果文件被过滤出来就则匹配输出不允许提交。 if echo $f |tr A-Z a-z|grep -Eq $FILTER;then echo File $f is not allow $FILTER file 2 exit 1 fi FilesSize$SVNLOOK cat -t $TXN $REPOS $f |wc -c ; 限制单个文件提交的大小 if [ $FilesSize -gt $MAX_SIZE ];then echo File $f is too large(must $MAX_SIZE)B 2 exit 1 fi done 提示将以上脚本放到版本库的hooks下并给执行权限将提交时如果有符合以上限制将限制提交。这里就不作测试可自行测试很简单。 二、post-commit钩子举例说明 post-commit是在提交后进行的操作事件用这个我们可以实现两个SVN服务器的时时同步保持版本库的最新或一些其他的方案这里我只提供时时同步脚本。 环境两台SVN服务器版本库全部相同。并且两台配置SSH无密钥登陆。 说明这里只在一台SVN上操作另一台操作完全一样。 脚本原理 1先通过ssh远程执行无端SVN服务器中svn版本库的版本号和当前SVN服务器SVN版本库的版本号做对比。 2对比完后当前的SVN版本库最新大于远端SVN版本号并通过svnadmin做增量备份。 3备份完再通过ssh传到远端SVN服务器上将增量备份进行还原操作 下面的脚本只是简单的实现并未做完善大家可以自己写更好的脚本实现这里只是说明一个思路而已。 [rootCentOS_11 test]# cat /svndata/test/hooks/post-commit#!/bin/shREPOS$1REV$2SVNLOOK/usr/bin/svnlookR_ID/usr/bin/ssh root192.168.1.12 $SVNLOOK youngest /svndata/test/L_ID$SVNLOOK youngest $REPOS[ $R_ID -eq $L_ID ] { echo The ID is neweast!! /root/a.log}[ $R_ID -gt $L_ID ] { echo Warning The R_ID is Biger than L_ID /root/a.log}[ $R_ID -lt $L_ID ] { R_ID_1$((${R_ID}1)) sleep 1 /usr/bin/svnadmin dump --incremental -r ${R_ID_1}:${L_ID} /svndata/test /root/svn_inter_bak/test_${R_ID_1}:${L_ID} [ $? -ne 0 ] { echo bakcup test dump failed /root/a.log }||{ echo test dump is OK $LOGS/a.log sleep 1 } /usr/bin/scp /root/svn_inter_bak/test_${R_ID_1}:${L_ID} root192.168.1.12:/root/svn_inter_dir/ [ $? -eq 0 ] {# /usr/bin/ssh root192.168.1.12 /bin/sh /root/svn_inter_restore.sh ssh root192.168.1.12 /usr/bin/svnadmin load /svndata/test /root/svn_inter_dir/* ssh root192.168.1.12 /bin/rm -f /root/svn_inter_dir/*}||{echo warning..scp remote is failed /root/a.log}} 完 转载于:https://www.cnblogs.com/wangbaigui/p/4411059.html