首页 文章

SVN预提交钩子脚本,用于阻止用户更改某些存储库文件

提问于
浏览
1

我想阻止我的SVN存储库用户检查某些文件的更改 . 我通过使用以下预提交钩子脚本完成此操作 . 但是,受限文件的数量正在增长,并且提交更改的速度变得非常慢 . 我想知道是否有一种更有效的编码方式,我玩过变更清单,但我无法做到这一点 .

提前致谢

预提交钩子脚本(基于Windows的SVN存储库):

setlocal
:: Inputs from Subversion
set REPOS=%1%
set TXN=%2%

:: Checks if one of the reference files
Rem Check if the commit contains reference files
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part1.txt" > nul
if %errorlevel%==0 (goto RefPart)
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part2.txt" > nul
if %errorlevel%==0 (goto RefPart)
......
.....
etc etc

exit 0

:: Blocks the commit if part are reference
: RefPart
echo. 1>&2
echo ---------------------------------------------------------------------- 1>&2
echo Your commit has been cancelled because you are trying to change a      1>&2
echo part for a reference turbine! Please make a copy of this part and      1>&2
echo save it under a different name.                                        1>&2
echo ---------------------------------------------------------------------- 1>&2
echo. 1>&2
exit 1

2 回答

  • 0

    我将其重写为使用perl而不是windows cmd脚本 . Perl具有更好的正则表达式支持,因此您可以使它更快,而不是使用脚本来查看所有参考文件 - 您可以过滤目录和模式 .

    草莓perl很容易运行 - 下载它,将exe和perl dll放在路径上的目录中,完成工作 .

    请注意,我还习惯使用带有Windows脚本的findstr来过滤快速的文件扩展名列表 . 我把svnlook的结果写成了一个文件(不要忘记将revnum附加到文件名并在之后删除它)并将其用作带有/ G选项的findstr命令的输入 . 先尝试一下 .

  • 3

    将“参考涡轮机”分解为不同的svn存储库,将其构建为库,并将其作为库分发 . 然后只允许那些需要它的人使用“参考涡轮”库 .

    检查不可修改的源代码,由无权改变它的人建造数百次,这只是浪费电力和时间 .

    如果您担心在调试过程中需要逐步通过参考涡轮机源,请提供分配两个版本的库,一个带调试符号和相应的源代码,另一个没有调试符号 . 大多数IDE都有加载“源代码”包的概念,以便在调试会话时提供人类可读的文本 .

相关问题