2

我想避免在除分支根之外的任何东西上创建 svn mergeinfo 属性。我们有一个主干分支和一些其他分支。

假设我对 svn 触发器一无所知,我需要遵循哪些步骤来设置一个预提交挂钩,以防止将 mergeinfo 属性添加到除分支根之外的任何内容?

主干位于存储库的基础“/trunk”中,所有分支都在“/branches/foo”中

4

2 回答 2

3

基本上,您需要定义一个 SVN预提交挂钩。首先,请阅读一般的钩子

您可能希望先将 pre-commit.tmpl 文件复制到pre-commit,然后在其中实现逻辑。

您可能需要检查当前执行事务的差异,例如:添加:svn:mergeinfo

由于有关为哪个文件添加的信息在不同的行上,因此您可能需要比 grep 更复杂的处理工具——也许是一个简单的 perl 脚本。

当您确定一个事务有一个您不想要的附加属性时,您可以阻止该提交;或者,如果您特别大胆,可以尝试修改事务并继续。

于 2010-01-05T09:42:29.303 回答
1

以下应该工作。您的存储库已经在主干上有 svn:mergeinfo,因此您永远不希望任何人再次添加。

顺便说一句,我们的实际钩子还确保每次提交都伴随着一条日志消息,并且还可以防止通过 repo 浏览器删除我们的一些重要的顶级目录。

@echo off

set logfile=%TEMP%\%2.txt

"c:\program files\subversion\svnlook" log -t %2 %1 > %logfile%

for /f "tokens=1,2*" %%i in (%logfile%) do (
    if %%i==UU goto checkmergetracking
)

for /f "tokens=1,2*" %%i in (%logfile%) do (
    if %%i==_U goto checkmergetracking
)

del %logfile%
exit 0

:checkmergetracking
"c:\program files\subversion\svnlook" diff -t %2 %1 > %logfile%
find "Added: svn:mergeinfo" %logfile%
if ERRORLEVEL 1 goto nomergeinfo

del %logfile%
echo "Addition of Merge Info Not Allowed" >&2
exit 1

:nomergeinfo
del %logfile%
exit 0
于 2010-10-15T17:18:12.843 回答