Contents

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

Contents

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ 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