不少开发员提交修改的时候都不写注释,导致查看历史时很费劲,也不太符合规范。有的公司要求每次提交修改时都写上bug号或者任务描述,那么如何在工具上防止开发员们不写注释呢?

利用svn的pre-commit钩子可简单实现此要求。

进入仓库project1/hooks目录,找到pre-commit.tmpl文件,重命名,去掉后缀.tmpl。 
编辑pre-commit文件:(Linux系统和windows系统脚本内容见1和2)

1、Linux系统

方法1:

将: 
$SVNLOOK log -t "$TXN" "$REPOS" | \ 
   grep "[a-zA-Z0-9]" > /dev/null || exit 1 
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 
这三行注释掉(前面加#符号), 
在此位置添加如下几行:

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` 
if [ "$LOGMSG" -lt 5 ];#要求注释不能少于5个字符,您可自定义 
then 
  echo -e "\nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2 
  exit 1 
fi

保存,退出。 
给pre-commit添加可执行权限: 
chmod +x pre-commit 
这里记得修改 $SVNLOOK=(svnlook的路径,/csvn的安装目录/bin/svnlook) 
配置结束,可以使用了。

方法2:

这两天把项目的开发机迁移到了linux环境,用python重写了原来的svn hook,保存为pre-commit放到svn的hooks目录下,chmod +x pre-commit加上执行权限即可。windows下写SVN钩子比较麻烦,只能是批处理或者exe,linux下随便用什么脚本语言写都可以,只要加上可执行权限就行了。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
SVN提交前检查钩子
功能:
1、强制填写提交注释,内容10字节以上
2、强制注释格式为:xxx:xxx
3、提交文件检查,过滤不允许提交的文件 作者: 李思杰 <lsj86@qq.com> <2012/04/28>
""" import sys
import os
import re def main(argv):
(repos, txn) = argv
badlist = (".*config\.php$", ".*/php/cache", ".*test", "config\.js$","^.*\.db$")
message = "".join(os.popen("/usr/bin/svnlook log '%s' -t '%s'" % (repos, txn)).readlines()).strip()
if len(message) < 10:
sys.stderr.write("请输入本次提交的修改内容,10字节以上。");
sys.exit(1)
if message.find(':') < 1:
sys.stderr.write("请按规范填写注释,格式为:功能名: 修改说明。");
sys.exit(1) changelist = os.popen("/usr/bin/svnlook changed '%s' -t '%s'" % (repos, txn)).readlines()
for line in changelist:
for pattern in badlist:
if re.search(pattern, line):
sys.stderr.write("请不要把 %s 加入版本库。" % line[1:].strip());
sys.exit(1)
sys.exit(0) if __name__ == "__main__":
main(sys.argv[1:])

 2、windows强制注释脚本

@echo off  
 setlocal

set REPOS=%1  
 set TXN=%2

rem 保证输入8个字符 
 svnlook log %REPOS% -t %TXN% | findstr "........" > nul 
 if %errorlevel% gtr 0 goto :err_action

rem 过滤空格字符 
svnlook log %REPOS% -t %TXN% | findstr /ic:"        " > nul 
 if %errorlevel% gtr 0 goto :success 
  
 :err_action 
 echo 你本次版本提交未填写任何变更的日志说明信息.      >&2 
 echo 请补充日志说明信息后再提交代码,例如:功能说明等.  >&2 
 echo 输入的日志信息不少于8个字符说明(或4个汉字),谢谢! >&2 
 echo *******************禁止空格数据***************** >&2

goto :err_exit

:err_exit 
 exit 1 
  
 :success 
 exit 0

最新文章

  1. git-简单流程(学习笔记)
  2. Qt 5.0+ 中 connect 新语法与重载函数不兼容问题的解决方法,以及个人看法
  3. 如何用Qt做SolidWorks二次开发
  4. (转)[SQL Server] 动态sql给变量赋值(或返回值给变量)
  5. 10款让人惊叹的HTML5/jQuery图片动画特效
  6. 【问题】和NULL比较遇到的问题
  7. 【Dog】
  8. ubuntu14.04 wps字体缺失问题
  9. Spring流程
  10. Robotium 框架学习之概述
  11. java 多线程,T1 T2 T3 顺序执行
  12. ubuntu 配置apt-get源
  13. PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
  14. [CF1107E]Vasya and Binary String【区间DP】
  15. HTML学习笔记Day9
  16. css3基础一
  17. tsconfig.json配置
  18. hive行转列
  19. C#编程(二十一)----------扩展方法
  20. iOS调用第三方地图App进行导航方法

热门文章

  1. ArcGis for WPF(1)
  2. bzoj1004:[HNOI2008]Cards
  3. bzoj1402:[HAOI2008]硬币购物
  4. (CodeForces )540B School Marks 贪心 (中位数)
  5. 新建DragonBones动画文件
  6. c++primer复习(一)
  7. Linq知识大全
  8. yii2 gii页面404和debug调试栏无法显示解决方法
  9. javaScript &amp; jquery完美判断图片是否加载完毕
  10. ubuntu下的supervisor启动express失败问题