svn 服务器禁止提交指定的文件

都8102年了,还是有这么多的公司使用SVN
我们公司在生产环境中使用svn对外网进行版本管理,因为每台服务器的配置文件是独立的,这就要求不允许上传配置文件,简单看了一下svn的 hooks功能,实现了禁止上传某些文件
下面直接贴出代码

$ cat hooks/pre-commit

#!/bin/sh
REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook     #svn的安装目录下的svnlook

# 强制要求 svn commit msg
LOGMSG=$($SVNLOOK log $REPOS -t $TXN | wc -c)    #匹配[a-zA-Z0-9]中的内容 存储到LOGMSG变量中
if [ "$LOGMSG" -gt 150 ]; then                                  #判断LOGMSG的大小是否大于20字节
 exit 0 
else 
 echo -e "\n 提交被阻止,请填写关于本次修改的log信息(需大于10个汉字),然后重新提交!" 1>&2
 exit 1
fi
# 过滤禁止上传的文件
limit_file_count=$($SVNLOOK changed -t $TXN $REPOS | /bin/egrep -c 'config.json|whiteList.json|logicServers.json|u9Config.json')
if [[ $limit_file_count -ne 0   ]]
then
    # 错误提示
    echo -e '.' 1>&2
    echo -e '.' 1>&2
    echo -e '包含禁止上传的文件' 1>&2
    echo -e 'config.json, whiteList.json, logicServers.json, u9Config.json' 1>&2
    echo -e '.' 1>&2
    echo -e '.' 1>&2
    exit 1
fi
别忘记了给 hooks/pre-commit 文件加上执行权限
# svnlook 还有这么多用法,可以参考上面的思路定制更多有意思的事情
$ svnlook help
general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
Note: any subcommand which takes the '--revision' and '--transaction'
      options will, if invoked without one of those options, act on
      the repository's youngest revision.
Type 'svnlook help ' for help on a specific subcommand.
Type 'svnlook --version' to see the program version and FS modules.

Available subcommands:
   author
   cat
   changed
   date
   diff
   dirs-changed
   filesize
   help (?, h)
   history
   info
   lock
   log
   propget (pget, pg)
   proplist (plist, pl)
   tree
   uuid
   youngest

Comments

Popular posts from this blog

Openvpn客户端路由配置

解决Sublime Text 无法显示韩文