设置VisualSVN在提交修改时必须输入一定数量的备注信息

我发现在使用SVN中,提交时,很多人不习惯填写备注信息,虽然在培训中、平时使用时多次提醒备注信息的好处,但是效果不大,每次提交时还是不写,或者随便写两字。

所以很有必要通过系统设置强制填写足够数量的备注信息。

在VisualSVN中提供了这种功能,可以在提交之前执行一个脚本,如果提交的信息不符合要求(比如备注信息不够长),就返给客户端一个错误,提交不成功。

在VisualSVN管理器中右键点击一个项目,弹出菜单,在”所有任务”中,可以看到“Manage Hooks...”菜单,如下:


点击之后弹出下面这个对话框:


在commit这一栏中,有三种不同的hook供选择,分别为:

Start commit hook:这个在发送本地内容到服务器之前就执行,一般用于权限检查,因为传给脚本的内容只有两个,分别是库路径和用户名,没有备注信息。

Pre-commit hook:这个在发送本地内容到服务器之后,真正提交之前执行,一般用于检查备注信息,传给这个脚本的信息也有两个,分别为库路径和备注信息。

Post-commit hook:这个是完全提交完成之后,执行的脚本,传给这个脚本的信息有两个,分别为库路径和当前的版本号。

我们需要设置的显然是Pre-commit hook脚本,因为之后这个脚本能够接收到备注信息,从而判断备注信息是否满足要求。


双击Pre-commit hook这一项之后,弹出一个对话框,输入脚本信息,如下:


我这里采用的是一个perl脚本进行验证custom-pre-commit.pl,内容如下:

#!/usr/bin/perl
# config section
$svnlook = '"G:Program FilesVisualSVN Serverinsvnlook.exe"';
#--------------------------------------------
$repos = $ARGV[0];
$txn = $ARGV[1];
$comment = `$svnlook log -t "$txn" "$repos"`;
#destimarve说上面这个命令有问题,需要是使用下面这种才能获取到comment,个人自己试试吧,哪种可行就用哪种,本人试了一下两种都可行。
#$comment = `$svnlook log "$repos" -t "$txn"`;
chomp($comment);
if ( length($comment) < 10 )
{
    print STDERR "提交的备注信息长度必须大于10个字节,请详细填写备注信息。";
    exit(1);
}

exit(0);



我这里custom-pre-commit.pl脚本放在G:SVNRepositories下,由perl调用。
这个脚本的意思是如果备注信息长度小于10,就打印一个错误信息,同时退出码为1。
VisualSVN如果接收到退出代码不等于0,就终止提交,同时将错误输出显示给客户端。


总结:
1,只能在Pre-commit hook中设置脚本,我原来想如果能在start commit hook设置就好了,后来发现start commit hook根本没有传递备注信息进来,所以就没办法了。在Pre-commit hook中设置的缺点是需要等到所有数据都上传到服务器上之后,才进行检查,如果你提交的数据量很大,传了半天终于传完了,结果告诉你备注不合格,你是不 是有点抓狂呢?
2,只能针对项目库进行设置,不能针对目录设置。

===========================

当我们用tortoisesvn,提交代码时,有很多人不喜欢写注释的,代码版本多了,根本搞不清,哪个版本改了什么东西?所以如果加一些注释的话,我们看起来,也方便很多。所以在提交的时候,我会强制要求,写注释。如果对svn的安装配置不怎么了解,请参考:linux svn安装和配置,不结合apache

1, cd /home/administrator/www/svn_test svn_test是一个代码仓库

2,mv ./hooks/pre-commit.tmpl ./hooks/pre-commit 将代码仓库根目录下,hooks文件夹中的pre-commit.tmpl文件重命名为pre-commit

3,vim ./hooks/pre-commit

  1. REPOS="$1"  
  2. TXN="$2"  
  3.   
  4. # Make sure that the log message contains some text.  
  5. SVNLOOK=/usr/bin/svnlook  
  6. $SVNLOOK log -t "$TXN" "$REPOS" |   
  7.  grep "[a-zA-Z0-9]" > /dev/null || exit 1  
  8.   
  9. Exit on all errors.  
  10. set -e  
  11.   
  12. # Check that the author of this commit has the rights to perform  
  13. # the commit on the files and directories being modified.  
  14. "$REPOS"/hooks/commit-access-control.pl "$REPOS" $TXN   
  15.  "$REPOS"/hooks/commit-access-control.cfg  
  16.   
  17. # All checks passed, so allow the commit.  
  18. exit 0  

上面是修改前的,看一下,下面的,修改后的。

  1. REPOS="$1"  
  2. TXN="$2"  
  3.   
  4. # Make sure that the log message contains some text.  
  5. SVNLOOK=/usr/bin/svnlook  
  6.   
  7. LOGMSG=`$SVNLOOK log -t $TXN $REPOS | wc -m`       //定义个变量,注意这里不是单引号  
  8.   
  9. #$SVNLOOK log -t "$TXN" "$REPOS" |                //把这一行和下面的一行注释掉  
  10. # grep "[a-zA-Z0-9]" > /dev/null || exit 1  
  11.   
  12. echo $LOGMSG > /home/administrator/www/aaa.txt     //为了测试变量用的,查看$LOGMSG有没有值,最后要注释掉  
  13. if [ "$LOGMSG" -lt 48 ]                            //这里为什么是48呢,一个汉字对应16个字符  
  14. then  
  15.  echo " 至少输入4个汉字" >&2                        //必须填四个汉字  
  16.  exit 1  
  17. fi  
  18.   
  19. Exit on all errors.  
  20. #set -e  
  21.   
  22. # Check that the author of this commit has the rights to perform  
  23. # the commit on the files and directories being modified.  
  24. #"$REPOS"/hooks/commit-access-control.pl "$REPOS" $TXN     //把这一行和下面的一行注释掉。  
  25. #  "$REPOS"/hooks/commit-access-control.cfg  
  26.   
  27. # All checks passed, so allow the commit.  
  28. exit 0  

4,保存后,我们要给pre-commit这个文件,加可执行权限chmod +x pre-commit,有一点在说一下就是$SVNLOOK 前面的不是单引号,具体shell语法,请参考shell在线手册

看看效果图片

svn 强制要求填写备注

svn 强制要求填写备注

原文地址:https://www.cnblogs.com/doseoer/p/4537434.html