都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
$ 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 文件加上执行权限

 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
# 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