我发现在使用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 Files\VisualSVN Server\bin\svnlook.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. # Make sure that the log message contains some text.
  4. SVNLOOK=/usr/bin/svnlook
  5. $SVNLOOK log -t "$TXN" "$REPOS" | \
  6. grep "[a-zA-Z0-9]" > /dev/null || exit 1
  7. # Exit on all errors.
  8. set -e
  9. # Check that the author of this commit has the rights to perform
  10. # the commit on the files and directories being modified.
  11. "$REPOS"/hooks/commit-access-control.pl "$REPOS" $TXN \
  12. "$REPOS"/hooks/commit-access-control.cfg
  13. # All checks passed, so allow the commit.
  14. exit 0

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

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

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

看看效果图片

svn 强制要求填写备注

设置VisualSVN在提交修改时必须输入一定数量的备注信息的更多相关文章

  1. SVN提交修改时出现:Checksum mismatch

    在使用SVN commit提交修改时,提示Checksum mismatch 问题,提示版本不一致,不能提交,类似于下图. 图片来源于网络,如有侵权,请告知删除. 搜索stackoverflow.co ...

  2. visualsvn server 提交修改日志

    修改日志时遇到以下错误: Repository has not been enabled to accept revision propchanges;ask the administrator to ...

  3. mysql设置updatetime字段每次修改时自动更新

    我们在数据库表设计阶段中都会加上CreateTime, UpdateTime字段, 在重要业务字段更新的时候,都会重新赋值UpdateTime字段,这个对后期查找分析业务数据变更时非常有用. 但是现在 ...

  4. 设置git 不提交 修改权限的文件

    vim .git/config  打开文件

  5. 基于SpringBoot从零构建博客网站 - 开发设置主页标识和修改个人信息功能

    由于守望博客系统中支持由用户自己设置个人主页的URL的后半段,所以必须要用户设置该标识的功能,而且是用户注册登录之后自动弹出的页面,如果用户没有设置该标识,其它的操作是不能够操作的,同时要求主页标识只 ...

  6. VisualSVN设置提交时必须输入日志信息

    VisualSVN设置提交时必须输入日志信息 1.svn提交时强制输入提交信息 为了阻止SVN提交空日志信息和垃圾文件可以在SVN服务器端强制必须填写日志信息,这时需用到pre-commit钩子脚本. ...

  7. 设置Git提交时不用输入用户名和密码

    在用git提交时代码至github上时每次都要输入用户名和密码,当提交操作较为频繁时非常不方便,可以按下文中的介绍,设置成提交时不用输入用户名和密码: 1.在当前库下,已经运行过 git remote ...

  8. easyUI draggable插件使用不当,导致拖动div内部文本框无法输入;设置echarts数据为空时就显示空白,不要动画和文字

    先上一个Demo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://ww ...

  9. 当git上文件大小写重命名的修改时(git大小写敏感/默认不敏感),如何提交

    git默认是大小写不敏感!!! 加了感叹号是什么意思呢,意思就是这本身就是一个坑,本人使用的IDE是idea(网上说Eclipse可以避开问题),这个IDE本身就集成了git,但是如果要在termin ...

随机推荐

  1. 在apache2.4.6中配置虚拟主机支持web.py

    web.py 是一个简单好用的python web框架. (http://webpy.org/) apache httpd是一款开源配置简单的web容器. (http://apache.org/) 假 ...

  2. Spiral Matrix -- LeetCode

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  3. POJ 2987 Firing(最大权闭合图)

    [题目链接] http://poj.org/problem?id=2987 [题目大意] 为了使得公司效率最高,因此需要进行裁员, 裁去不同的人员有不同的效率提升效果,当然也有可能是负的效果, 如果裁 ...

  4. TranslateAnimation详解 Android动画。

    TranslateAnimation详解 Android JDK为我们提供了4种动画效果,分别是: AlphaAnimation,RotateAnimation, ScaleAnimation, Tr ...

  5. MySQL中in子查询会导致无法使用索引问题(转)

    MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...

  6. 搭建基于asp.net的wcf服务,ios客户端调用的实现记录

    一.写wcf 问题: 1.特定的格式 2.数据绑定 3.加密解密 二.发布到iis 问题: 1.访问权限问题,添加everyone权限 访问网站时:http://localhost/WebbUploa ...

  7. 初识交替最小二乘ALS

    ALS是alternating least squares的缩写 , 意为交替最小二乘法:而ALS-WR是alternating-least-squares with weighted-λ -regu ...

  8. [转]C++函数模板与模板函数

      1.函数模板的声明和模板函数的生成   1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. ...

  9. 【hibernate/JPA】对实体类的的多个字段建立唯一索引,达到复合主键的效果【spring boot】注解创建唯一索引和普通索引

    对实体类的的多个字段建立唯一索引,达到复合主键的效果 package com.sxd.swapping.domain; import lombok.Getter; import lombok.Sett ...

  10. DevExpress.XtraTreeList

    1. DevExpress.XtraTreeList控件         将其简称为tree,tree其实就是一个树表控件,他像树一样包含具有父子关系的若干节点,同时每个节点又是一个带有多个字段的记录 ...