Apache Subversion 预提交以限制文件

Apache Subversion pre-commit to restrict files

我是 Apache SVN 的新手,我需要一些帮助来使用预提交脚本来过滤哪些文件正在上传到我的存储库。

我搜索了很多,在另一个问题上找到了这个脚本,但它对我不起作用。

#!/bin/bash

REPOS=
TXN=
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  }'` > /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 但它没有用,有人可以帮助我吗?

首先 - 您似乎错误地使用了 svnlook。它应该有参数:

svnlook changed ${REPOS} -t ${TXN}

-t 表示 'read from transaction' 和 TXN - 交易名称本身。

其次 - 不确定我是否理解正确,但是挂钩文件的名称应该是 pre-commit 而不是 pre-commit.tmpl

第三 - 预提交应该有正确的权利。对于测试尝试 a+rwx


更新。获取交易对象进行测试并不容易,但您可以使用 svnlook -r <revision> <repositiry_path> 并在已提交的修订上进行实验。