分类: 系统运维
2016-01-11 13:39:56
svn是很多企业和个人用的版本控制软件,非常方便。通用的权限控制在auth文件中,但是缺点是权限较大,w的权限一旦赋予,相应用户都可以有删除svn文件的权限,但是如果不赋予w权限,又没办法commit,非常纠结。本文就是通过一个钩子脚本,实现用户有新增修改文件之后commit,但是又不可以删除的权限细化控制,只有制定的某些用户可以做删除动作。
1、关于svn的安装配置,网上一搜一大堆,这里面我就不做赘述
2、关于钩子脚本,网上也有介绍,也可以搜索到,我这里也不做说明,各位看官可以自行搜索了解,如果您对钩子脚本的实现原理也了解了,请直接pass,看第3条。
3、现在我默认你已经对钩子脚本的作用已经有所了解了,直接上操作步骤了
3.1、在你的svn项目目录下的hooks目录下新建脚本pre-commit,代码如下
#2016-1-11 删除权限控制 by Archer
REPOS="$1"
TXN="$2"
SVNLOOK=/opt/CollabNet_Subversion/bin/svnlook #此处根据你的系统变量而定,你可以通过which svnlook来确定
# Make sure that the log message contains some text.
if [ -z `$SVNLOOK log -t "$TXN" "$REPOS" |grep "[a-zA-Z0-9]"` ];then
echo "请输入注释!" >&2
exit 1
fi
USER=`$SVNLOOK author -t $TXN $REPOS`
ADMINLIST=test1,test2 #这里是拥有删除权限的用户,逗号隔开
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
echo "你没有权限删除,请联系管理员删除!" >&2
exit 1
fi
fi
# All checks passed, so allow the commit.
exit 0
3.2、给钩子脚本执行权限 chmod 755 pre-commit,不需要重启