zoukankan      html  css  js  c++  java
  • 设置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 强制要求填写备注

  • 相关阅读:
    php日常日志写入格式记录
    ssh 配置config 别名
    win10 使用docker
    gulp watch error ENOSPC
    log4net各种Filter使用【转】
    【转】Controllers and Routers in ASP.NET MVC 3
    【转】ASP.NET MVC学习笔记-Controller的ActionResult
    JavaScript 面向对象程序设计(下)——继承与多态 【转】
    Ajax– 刷新页面 【转】
    [webgrid] – selecterow
  • 原文地址:https://www.cnblogs.com/doseoer/p/4537434.html
Copyright © 2011-2022 走看看