我想 避免创建 svn mergeinfo 属性 除了树枝根部以外的任何地方。我们有一个主干分支和一些其他分支。

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

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

有帮助吗?

解决方案

基本上,你需要定义一个SVN 预提交 钩。首先,请阅读有关 一般情况下的钩子.

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

您可能想要检查当前正在执行的事务的差异,例如:添加:svn:合并信息

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

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

其他提示

以下应该工作。您的仓库已经拥有了svn:合并信息树干上,所以你永远不希望任何人再添加一个。

顺便说一句,我们的实际挂钩还可以确保每一个承诺是伴随着一个日志消息,也通过回购浏览器可以防止我们一些重要的顶级目录的删除。

@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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top