需求:上传到SVN服务器的项目文件如果被普通用户误删了,虽然能恢复,但是如果删除的文件比较多,注释的内容简单,恢复的时候需要一个个的保存到本地,然后再上传到服务器上,会很麻烦,可能还会出现提交代码版本冲突的问题,那么,怎么才能禁止普通用户删除SVN服务器的项目文件呢?

一、找到需要加权限的版本库中hooks目录下的pre-commit.tmpl文件,备份并将其重命名为pre-commit脚本文件。

cd /var/www/svn/Network_Group/hooks     # 这是我要修改的版本库位置

cp pre-commit.tmpl pre-commit.tmpl-backup    # 备份

mv pre-commit.tmpl pre-commit     # 重命名

二、修改pre-commit文件内容

vim pre-commit,文件内容默认如下:

注释掉73-78行的内容,增加80-91的内容,下面的脚本复制粘贴就可以

if [ -z `$SVNLOOK log -t "$TXN" "$REPOS" |grep "[a-zA-Z0-9]"` ];then
echo "请输入注释!" >&
exit
fi
USER=`$SVNLOOK author -t $TXN $REPOS`
ADMINLIST=admin,zhangsan # 这里是拥有删除权限的用户,逗号隔开
if [ "`echo $ADMINLIST|grep -w $USER|wc -l`" -eq ];then
if [ `$SVNLOOK changed -t $TXN $REPOS |grep "^D "|wc -l` -gt ];then
echo "你没有权限删除,请联系管理员删除!" >&
exit
fi
fi

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

三、给 pre-commit 脚本文件执行权限   chmod 755 pre-commit,不需要重启SVN

四、测试

1、没有输入注释时,提示:

2、删除时若没有权限,提示:

脚本说明:

#!/bin/sh

REPOS="$1"   # 库位置
TXN="$2"   # 版本

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

if [ -z `$SVNLOOK log -t "$TXN" "$REPOS" |grep "[a-zA-Z0-9]"` ];then   # 如果commit的用户没有输入注释
echo "请输入注释!" >&2   # 提示错误
exit 1   # 错误退出
fi
USER=`$SVNLOOK author -t $TXN $REPOS`
ADMINLIST=GuoJiHe,melonlink   # 这里是拥有删除权限的用户,逗号隔开
if [ "`echo $ADMINLIST|grep -w $USER|wc -l`" -eq 0 ];then   # 如果commit的用户没在ADMINLIST里面
if [ `$SVNLOOK changed -t $TXN $REPOS |grep "^D "|wc -l` -gt 0 ];then   # 如果开头包含D(D代表删除)
echo "你没有权限删除,请联系管理员删除!" >&2   # 提示错误
exit 1 # 错误退出
fi
fi

本文参考自其他博客:

(1)https://blog.csdn.net/helijie92902/article/details/54534156

(2)http://blog.chinaunix.net/uid-29893597-id-5594571.html

(3)https://blog.51cto.com/laoguang/1139645

最新文章

  1. jQuery - 1.简单的JQuery
  2. 匿名函数和Lamda
  3. 上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策
  4. install 命令用法详解
  5. linux 缺少动态连接库.so--cannot open shared object file: No such file or directory
  6. poj2631 树的直径 + bfs
  7. Qt之QTableView添加复选框(QAbstractItemDelegate)
  8. MySQL字符串类型转换时间类型
  9. bzoj1821
  10. Zepto源码笔记(二)
  11. Qt Assistant 工作机制
  12. Java读书笔记1
  13. composer的安装方法
  14. ABP框架连接Mysql数据库
  15. java前端js和框架内容知识和面试
  16. 在JAVA中返回类型使用泛型T和Object有什么区别?
  17. 【HDU5909】Tree Cutting(FWT)
  18. sqlserver 2008评估期已过
  19. 27-ATM+购物车程序
  20. pku oj overhang叠加卡片求最少的卡片数

热门文章

  1. XLNet and Robertra
  2. Vue脚手架菜鸟级错误 npm run dev
  3. Git 更新
  4. Pycharm DataBase Navigator Plugins 使用
  5. redis源码分析(四)--aof持久化
  6. RT1052 BootLoader总结
  7. golang(二)
  8. 解决docker容器中Centos7系统的中文乱码
  9. Codeforces Round #426 (Div. 1) (ABCDE)
  10. git 学习笔记--Feature分支