经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit


背景:SVN的项目文件被普通用户误删了,这是个非常严重的错误,还好恢复的及时,不然的话,后果不堪设想。但是由于删除的文件比较多,注释的内容简单,恢复的时候需要一个个的保存到本地,然后再上传到服务器上,开发这些模块的小伙伴们还会遇到提交代码版本冲突的问题。由于波及的范围比较大,所以领导让我研究一下,怎么才能禁止普通用户删除SVN中的项目文件。于是,这篇文章就诞生了。


操作步骤】


1、找到需要加权限的版本库中hooks目录下的pre-commit.tmpl文件,将其重命名,将后缀去掉,为pre-commit脚本文件。如果没有该文件,则新建脚本pre-commit。

经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit_第1张图片

每个文件的作用范围:

post-commit
在提交完成,成功创建版本之后执行该钩子,提交已经完成,不可更改,因此本脚本的返回值被忽略。

post-lock
对文件进行加锁操作之后执行该脚本

post-revprop-change
在修改 revision 属性之后,执行该脚本。因为修改稿已经完成,不可更改,因此本脚本的返回值被忽略(不过实际上的实现似乎是该脚本的正确执行与否影响属性修改)

post-unlock
对文件进行解锁操作之后执行该脚本

pre-commit
在 Subversion transaction 完毕之后,在提交之前,执行该脚本

pre-lock
对文件进行加锁操作之前执行该脚本

pre-revprop-change
在修改 revision 属性之前,执行该脚本

pre-unlock
对文件进行解锁操作之前执行该脚本

start-commit
在客户端还没有向服务器提交数据之前,即还没有建立 Subversion transaction(缩写为 txn) 之前,执行执行该脚本


2、修改pre-commit文件内容

原来的内容都注释掉,即在没有“#”的代码前加“#”,然后添加下面的内容:

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook

if [ -z `$SVNLOOK log -t "$TXN" "$REPOS" |grep "[a-zA-Z0-9]"` ];then
        echo "nLog message cann't be empty! you must input more than 5 chars as comment!." >&2
	exit 1
fi
USER=`$SVNLOOK author -t $TXN $REPOS`
ADMINLIST=admin,helijie
if  [ "`echo $ADMINLIST|grep -w $USER|wc -l`" -eq 0 ];then
	if [ `$SVNLOOK changed -t $TXN $REPOS |grep "^D "|wc -l` -gt 0 ];then
		echo "You Don't have the pemmision of delete!Please contact your administrator!" >&2 		
		exit 1
	fi
fi
exit 0



详细介绍:

经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit_第2张图片



ADMINLIST=admin,helijie  表示只有admin和helijie这两个用户有删除文件的权限,如果还有其他人,只需用逗号隔开,当然,这些用户名需要在conf下的passwd文件中进行配置

经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit_第3张图片


3、给钩子脚本执行权限   chmod 755 pre-commit,不需要重启



4、测试

没有输入注释:

经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit_第4张图片


删除:

经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit_第5张图片


【学习心得】


1、没有做不到,只有想不到。

2、发现问题,解决问题,提升得更快

3、只有用户体验后才能发现更多的问题,然后才能更好地完善我们的管理系统,更好地为用户服务。


经验分享之SVN禁止删除和强制注释操作的钩子脚本pre-commit_第6张图片




你可能感兴趣的:(我的成长路の计算机)