SVN提交强制写入注释及相关扩展阅读

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVN提交强制写入注释及相关扩展阅读相关的知识,希望对你有一定的参考价值。

假设SVN已经搭建成功,版本库根目录为/opt/svn/repos

找到版本库下面./hook/目录,一共9个文件,简单介绍一下


文件说明
1pre-commit.tmpl提交之前被执行
2pre-lock.tmpl版本库锁定之前被执行
3pre-revprop-change.tmpl版本库增删改之前被执行
4pre-unlock.tmpl版本库解除锁定之前被执行
5post-commit.tmpl提交之后被执行
6post-lock.tmpl版本库锁定之后被执行
7post-revprop-change.tmpl版本库增删改之后被执行
8post-unlock.tmpl版本库解除锁定之后被执行
9start-commit.tmpl提交之前被执行

其中start-commit和pre-commit的区别在于:

start-commit在提交事务发生之前执行,通常用于判断用户是否拥有提交权限.

pre-commit在提交事务执行完之前执行,通常用于保护版本库的内容或者文件位置.


本文只涉及提交注释的控制,只针对pre-commit进行说明,其他的脚本将不在本文进行说明

原pre-commit.tmpl文件中起作用的部分

REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" |    grep "[a-zA-Z0-9]" > /dev/null || exit 1

该脚本接受2个参数

REPOS="$1" /opt/svn/repos  表示svn仓库的绝对路径值

TXN="$2"    表示最新的一个版本的事务ID,不是版本号


注:如果想按照版本号进行查看执行一下命令

svnlook log -r $ID /opt/svn/repos/

svnlook在这里的作用是打印本次提交的注释(svnlook log)并且查找其中的字母和数字(grep "[a-zA-Z0-9]"),但是不进行输出(> /dev/null),如果执行失败进行异常退出(exit 1)


接下来,我们对这个钩子进行改造,改造部分的脚本如下:

SVNLOOK=/usr/bin/svnlook
# anothor way
# LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c`
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | wc -c)
if [ "$LOGMSG" -lt 10 ]; then
echo -e "\n 提交文件时必须添加注释,提交中止." 1>&2
exit 1
fi

其中LOGMSG为注释的长度

这里去掉了查找(grep)条件,接受中文注释,如果需要对注释进行过滤再计算长度可以将查找添加回来

LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)

wc命令: -c 统计字节数 -l 统计行数 -w 统计字数(一个单词算一个字)

判断: -eq 等于 -gt 大于 -lt 小于

echo 错误提示重定向到stderr (0:stdin 1:stdout 2:stderr)


保存钩子后需要给文件赋予执行权限 chmod 755 pre-commit.tmpl

本文出自 “沙罗双树园” 博客,请务必保留此出处http://ohmmx.blog.51cto.com/12884864/1923700

以上是关于SVN提交强制写入注释及相关扩展阅读的主要内容,如果未能解决你的问题,请参考以下文章

svn 强制用户添加注释 和 允许用户修改注释

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

centos svn强制要求提交代码时写注释

如何让SVN提交时候强制添加注释

svn添加强制注释,pre-commit结合python

如何强制将审阅者姓名输入到 SVN 提交评论中