我是Apache SVN的新手,我需要一些帮助来使用预提交脚本来过滤哪些文件上传到我的存储库。
我经常搜索并在另一个问题上找到这个脚本,但它对我不起作用。
#!/bin/bash
REPOS=$1
TXN=$2
AWK=/usr/bin/awk
SVNLOOK="/usr/bin/svnlook";
#Put all the restricted formats in variable FILTER
FILTER=".(sh|xls|xlsx|exe|xlsm|XLSM|vsd|VSD|bak|BAK|class|CLASS)$"
# Figure out what directories have changed using svnlook.
FILES=`${SVNLOOK} changed -t ${REPOS} ${TXN} | ${AWK} '{ print $2 }'` > /dev/null
for FILE in $FILES; do
#Get the base Filename to extract its extension
NAME=`basename "$FILE"`
#Get the extension of the current file
EXTENSION=`echo "$NAME" | cut -d'.' -f2-`
#Checks if it contains the restricted format
if [[ "$FILTER" == *"$EXTENSION"* ]]; then
echo "Your commit has been blocked because you are trying to commit a restricted file." 1>&2
echo "Please contact SVN Admin. -- Thank you" 1>&2
exit 1
fi
done
exit 0
如果我尝试使用svnlook changed -t repodirectory
,则因为缺少子命令而无效。
我覆盖了我的pre-commit.tmpl
,但它不起作用,有人可以帮助我吗?
答案 0 :(得分:0)
首先 - 似乎你错误地使用了svnlook。它应该有参数:
svnlook changed ${REPOS} -t ${TXN}
-t表示从交易中读取'和TXN - 交易名称本身。
第二 - 不确定我是否理解正确,但是钩子文件的名称应该是pre-commit而不是pre-commit.tmpl
第三 - 预先提交应具有正确的权利。对于测试,请尝试+ rwx
更新。获取测试的事务对象并不容易,但您可以使用svnlook -r <revision> <repositiry_path>
并对已经提交的修订进行试验。