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

来源:互联网 发布:怎么植入php一句话木马 编辑:程序博客网 时间:2024/05/22 04:52


背景: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/svnlookif [ -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!." >&2exit 1fiUSER=`$SVNLOOK author -t $TXN $REPOS`ADMINLIST=admin,helijieif  [ "`echo $ADMINLIST|grep -w $USER|wc -l`" -eq 0 ];thenif [ `$SVNLOOK changed -t $TXN $REPOS |grep "^D "|wc -l` -gt 0 ];thenecho "You Don't have the pemmision of delete!Please contact your administrator!" >&2 exit 1fifiexit 0



详细介绍:




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



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



4、测试

没有输入注释:



删除:



【学习心得】


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

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

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






0 0
原创粉丝点击