是否可以为 SVN 1.8 编写 prcommit 挂钩以避免提交大于 ~20MB 的文件。任何建议,将不胜感激。谢谢 !
我尝试过,但这不适用于二进制文件或其他文件扩展名
filesize=$($SVNLOOK cat -t $TXN $REPOS $f|wc -c)
if [ "$filesize" -gt "$MAX_SIZE"]
then
echo "File $f is too large(must <=$MAX_SIZE)" >&2
exit 1
fi
您需要在这里做两件事:
- 首次使用
svn -t$TXN changed
获取事务中更改的路径。您需要过滤掉由以下命令返回的任何行的目录svn changed
以一个结尾/
.
- 对于每个条目
svn changed
,你需要运行svn -t$TXN filesize file
反对。然后,总结文件更改。
像这样的东西。这尚未经过测试,但应该可以给您一个想法:
total=0
svnlook -t $TXN changed | while read status file
do
[[ status == "D" ]] && continue # Ignore deletions
[[ $file == */ ]] && continue # Skip directories
size=$(svnlook -t $TXN filesize $REPOS $file)
((total+=size))
done
if [[ $total -gt $maxsize ]]
then
echo "Commit is too big!" >&2
exit 1
else
exit 0
fi
但是,我不喜欢使用 shell 来执行钩子脚本。相反,您应该使用真正的脚本语言,例如 Python 或 Perl。它们只是更容易使用,而且更强大、更灵活。
为什么你必须过滤掉这些大的提交?您是否让开发人员尝试提交他们刚刚构建的可执行文件?
Lazy badger 指出,您不是在谈论总提交大小,而是在谈论单个文件那么大。如果是这种情况,你会做一个类似的钩子,但不总计:
svnlook -t $TXN changed | while read status file
do
[[ $status == "D" ]] && continue # Skip Deletions
[[ $file == */ ]] && continue # Skip directories
size=$(svnlook -t $TXN filesize $REPOS $file)
if [ $size -gt $maxsize ]]
then
echo "File '$file' too large to commit" >&2
exit 2
fi
done
exit 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)