svn提交时强制注释

不少开发员提交修改的时候都不写注释,导致查看历史时很费劲,也不太符合规范。有的公司要求每次提交修改时都写上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

时间: 2024-09-20 06:05:15

svn提交时强制注释的相关文章

Linux停SVN提交时强制写日志

Linux下SVN提交时强制写日志 SVN默认可以不写注释提交,有时候可能忘记写注释,有的人也没有写注释的习惯,导致翻看history的时候都不知道做了哪些更改,可以依照以下步骤修改SVN配置,强制提交SVN前写注释   步骤: 1.进入svn/code/hooks目录,在svn版本库的hooks文件夹下面,复制模版pre-commit.tmplcp pre-commit.tmpl pre-commitchmod +x pre-commit 2.编辑pre-commit文件:将:$SVNLOOK

如何设置SVN提交时强制添加注释

windows版本: 1.新建一个名为pre-commit.bat的文件并将该文件放在创建的库文件的hooks文件夹中 2.pre-commit.bat文件的内容如下: @echo off set SVN_BINDIR="C:\ProgramFiles\Subversion" set SVNLOOK="E:\freescm\freescm\SVN\bin\svnlook.exe" setlocal set REPOS=%1 set TXN=%2 rem check

svn文件提交时强制写注释

这个操作需要修改版本库中的一个钩子文件,在你创建的版本库中有一个hooks文件夹,初始的时候其中有一个文件叫pre-commit.tmpl 在windows下将其修改为pre-commit.bat,在linux下将其改为pre-commit   linux下(文件名是: pre-commit,放到版本库的/hooks目录下)========================================================== #!/bin/shREPOS="$1"TXN=

maven-eclipse新添加的packegae和类文件,svn提交后别人同步不到类文件

问题描述 eclipse新添加的packegae和类文件,svn提交后别人同步不到类文件 eclipse新添加的packegae和类文件,svn提交后别人同步下来只看到了新添加的packegae文件夹,没有类文件,我们用的是maven工程 解决方案 eclipse svn添加过滤文件eclipse中svn提交时提示文件被锁 解决方案二: 刷新,提交路径对不对. 解决方案三: 和maven 没有关系吧 估计是svn没提交成功 解决方案四: 问题已经解决,使用eclipse自带的软件库重新安装了一个

FishEye+JIRA 如何通过SVN提交命令来创建问题,修复或关闭问题?

问题描述 现在使用JIRA创建了问题,通过SVN提交时加入问题编号例如:"AKG-12blbblblblbl"这样在JIRA中AKG-12问题页面中,SOURCE标签下可以看到有关问题的SVN提交通过配置FishEye开启了"Smartcommit",智能提交?类似这样一个例子,提交描述包含:"AKG-23#close解决一个BUG"这也在JIRA的Smartcommit手册页面找到了说明,但是实际使用不知还缺少什么配置,使用#close#res

SVN(TortoiseSVN)提交时忽略bin跟obj目录

原文:SVN(TortoiseSVN)提交时忽略bin跟obj目录 SVN(TortoiseSVN)提交时忽略bin和obj目录 一般协作开发情况下,有意思无意将bin和obj目录添加到版本管理中是很烦人的事儿,在VS中不断地编译程序集和提交将带来版本暴增问题.如果你用的是SVN(TortoiseSVN)可以通过添加属性来忽略掉. 具体实现 在解决方案目录上点右键 在乌龟菜单中找到"属性"点开 在弹出窗中点"新增" 在弹出窗中的"属性"中选择&q

svn合并时不小心删了以前没提交的代码怎么找回?

问题描述 tag下的版本我之前删除过一个目录smm但是再trunk下在这个smm目录下我新增了一些东西,结果我在做svn合并时不记得先提交trunk,所以导致了我合并后的trunk下smm目录都没有了,当我再想去svn库里面找到该smm时已经不是原来的了,这可怎么办?有没有什么办法找回来? 解决方案 svn如果没有提交过的话,就找不回了,相当于本地删除文件,svn是不会有记录的.如果之前有提交过现在不小心把它删除了,可以查看历史版本找回来的解决方案二:SVN多线程,如果你合并,必须是提交过的.如

SVN提交注意点

一.提交之前先更新 1.SVN更新的原则是要随时更新,随时提交.当完成了一个小功能,能够通过编译并且自己测试之后,谨慎地提交. 2.如果在修改的期间别人也更改了svn的对应文件,那么commit就可能会失败.如果别人和自 己更改的是同一个文件,那么update时会自动进行合并,如果修改的是同一行,那么合并时会产生冲突,这种情况就需要同之前的开发人员联系,两个人一起协商解决冲突,解决冲突之后,需要两人一起测试保证解决冲突之后,程序不会影响其他功能. 3.在更新时注意所更新文件的列表,如果提交过程中

Linux中svn提交文件后自动同步更新到网站目录

 下面来为各位介绍Linux中svn提交文件后自动同步更新到网站目录希望文章对各位有帮助.     有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkout代码,例如我的目录是/data/www/test svn co https://127.0.0.1/test/trunk/ /data/www/test/ 注意,这是因为有时我会在服务器上直接修改代