我发现在使用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. HDU 1394.Minimum Inversion Number-最小逆序数-完全版线段树(单点增减、区间求和)

    HDU1394.Minimum Inversion Number 这个题求最小逆序数,先建一个空的树,然后每输入一个值,就先查询一下,查询之后,更新线段树,然后遍历一遍,每次将第一个数放到最后之后,减 ...

  2. POJ 3620 Avoid The Lakes【DFS找联通块】

    Avoid The Lakes Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6826   Accepted: 3637 D ...

  3. 拓扑排序【p1137】 旅行计划

    Description 小明要去一个国家旅游.这个国家有\(N\)个城市,编号为\(1\)至\(N\),并且有\(M\)条道路连接着,小明准备从其中一个城市出发,并只往东走到城市\(i\)停止. 所以 ...

  4. geant4开发平台的构建方案的讨论a

    首先比较linux和windows下的平台的不同的功能 linux通过命令进行一系列操作,对于不习惯命令的也可以用鼠标,但是就显得过于落后,因为命令的存在自然表明其先进性. linux下的geant4 ...

  5. luogu P2828 Switching on the Lights(开关灯)

    题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一个N*N的矩形网络.(1<n<100) 然而bessie十分怕黑,他想计算可以把 ...

  6. yum安装openresty

    在群里看到春哥发的,先记录下来.一切都以官网为准,以后安装部署生态会越来越完善的. OpenResty 官方现在开始维护自己的打包虚机集合了,新的 linux 包仓库正在陆续登陆 openresty. ...

  7. 2.IsoDep类

    IsoDep 类概述: Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations on a Tag. Acquire ...

  8. NHibernate官方文档——第八章 继承映射(Inheritance Mapping)

    本文翻译自NHibernate官方文档NHibernate Reference Documentation 4.1. 受限于个人知识水平,有些地方翻译可能不准确,但是我还是希望我的这些微薄的努力能为他 ...

  9. JAVA实现网页快照,存为图片格式

    原文:http://blog.csdn.net/java2000_net/article/details/3643528 截取的google的效果,将就吧,不是特别好. 但是作为普通的应用,我想这个效 ...

  10. ASIHTTPRequest框架使用总结系列之阿堂教程3(异步请求)

    在上一节中,阿堂和网友们分享了ASIHTTPRequest框架对于get,post的同步请求方式.很显然,如果网速比较慢,查询的时候会一直很黑屏,直到请求结束界面才出现结果,这样用户体验肯定很不好了. ...