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

本文介绍了如何通过修改SVN的pre-commit钩子脚本,禁止普通用户删除项目文件,确保文件安全。操作步骤包括重命名或创建pre-commit脚本,设置权限列表,并添加脚本内容,以限制删除权限。测试结果表明,未输入注释的删除操作将被禁止,从而避免误删问题。


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


操作步骤】


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


每个文件的作用范围:

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



详细介绍:




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



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



4、测试

没有输入注释:



删除:



【学习心得】


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

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

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






评论 32
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值