当我们用TortoiseSVN提交代码时,有很多人不喜欢写注释,导致以后代码版本多,也不清楚哪个版本到底改了什么东西。所以在提交的时候,我会强制要求添加注释。这是如何实现的?这个话题就涉及到了svn的Hooks功能的使用。
所谓hooks,可以类似理解Linux内核Netfilter框架的hook点和hook函数的概念。当用户在维护代码的过程中,其执行的相关动作正好触发了相关hook点,就会去执行对应hook点的脚本。
那么如何设置hook脚本以保证强制用户添加注释,以及允许用户修改注释呢?
1. SVN强制添加注释信息
用户提交代码的动作,对应的是pre-commit。因此,进入hook目录把pre-commit.tmpl文件名修改为pre-commit, Windows下可以修改为pre-commit.bat,这样可以让系统知道该文件是可执行文件。
打开pre-commit文件,注释或删除所有的代码,然后添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/sh REPOS="$1" TXN="$2" SVNLOOK=/usr/local/bin/svnlook # 修改为服务器安装的subversion目录 whereis svnlook LOGMSG=$($SVNLOOK log -t “$TXN” “$REPOS” | grep "[a-zA-Z0-9]" | wc -m) if [ "$LOGMSG" -lt 10 ]; then #要求注释不能少于10个字符(数字和字母),您可自定义 echo -e "\nEmpty log message not allowed. Commit aborted!" 1>&2 exit 1 fi exit 0 |
保存,退出。
给pre-commit添加可执行权限:
chmod +x pre-commit
2. 允许用户修改注释信息
用户修改注释信息的动作,对应的是pre-revpos-change。将hooks目录下的pre-revpos-change.tmpl改名为pre-revpos-change。通常该文件包含的功能就是允许用户修改注释信息。默认文件内容如下,如果不是下面这些内容的话,可以对照修改即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/sh REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" ACTION="$5" if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi echo "Changing revision properties other than svn:log is prohibited" >&2 exit 1 |
保存,退出。
将该文件加上可执行权限即可:
chmod +x pre-revpos-change
这样,就可以允许用户修改注释信息了。
时间: 2024-12-20 05:04:00