题
我想编辑登录在库浏览器,并收到了一条错误消息,没有预先revprop变化挂钩存在储存库中。除了有一个可怕的名字,什么是预revprop变化挂钩,并且我如何创建它?
解决方案
基本上它是版本控制的属性之前启动的脚本修改的存储库,让您可以管理更精确地什么在你的资料库。
有在SVN DISTRIB不同的挂钩,位于/ hooks子目录模板(*您必须修改,并根据您的操作系统命名,激活.tmpl)。
其他提示
有关Windows中,这里的一个示例性批处理文件,其仅允许更改日志消息(未其他属性)的链接:
http://ayria.livejournal.com/33438.html
基本上下面的代码复制到一个文本文件,并将其命名为pre-revprop-change.bat
并将其保存在\hooks
子目录你的资料库。
@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5
:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME
:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION
:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY
goto :eof
:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
Linux允许版的日志评论,
- 找到的文件
pre-revprop-change.tmpl
在hooks
目录的仓库 - 复制的文件的同一目录下,重新命名它
pre-revprop-change
- 得到执行的权限的文件(服务器的用户,例如
www-data
)
编辑: (由于林德)
- 在那之后你可能需要编辑脚本返回出口价值的
0
对于这种修改,要允许。
下面是链接到堆栈溢出问题与许多常见的钩常见类型这里颠覆钩,包括pre-revprop-change
钩用于Windows的原始来源的交叉发布。
您应该是指存在,因为他们可能会随着时间的推移改善。
由于#patmortech
和我说你的代码“只在同一用户可以更改自己的密码。”
:: Only allow editing of the same user.
for /f "tokens=*" %%a in (
'"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %revision% %repository%') do (
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER
的名称钩脚本不是那么可怕如果你能破译它:它的 预订酒店的变化挂钩.总之,目的 pre-revprop-change
钩脚本是为了控制变化的版本(修订版)的性质和发送通知的(例如到时发送电子邮件修订酒店是改变)。
有2种类型的属性在颠复:
- 版本的性质(e。克
svn:needs-lock
和svn:mime-type
),可设置在文件和目录, - 未版本控制(修订版)的性质(例如
svn:log
和svn:date
)是设在库 修订.
版本的性质具有历史和可以操作由普通用户读写入一个储存库中。另一方面,未受控的性质没有任何历史和服务主要是维护的目的。例如,如果犯下修订它立即得到 svn:date
与UTC时间提交, svn:author
用你的用户名和 svn:log
与你的提交日志的消息(如果已指定的话)。
正如我已经指定的,目的 pre-revprop-change
钩脚本以控制的变化进行修订的性质。你不希望每个人都有权访问存储库,以便能够修改所有修订的性质,所以改变修改的性质是禁止通过默认。允许用户改变的性质,必须创建 pre-revprop-change
钩。
最简单的挂钩可以只包含一个行: exit 0
.它将允许任何经验证用户改变的任何修订财产和它不应该被用来在真正的环境。在Windows,可以用批脚本或PowerShell基于脚本到实现一些内的逻辑 pre-revprop-change
钩。
这PowerShell脚本,允许改变 svn:log
酒店和否认日志的信息。
# Store hook arguments into variables with mnemonic names
$repos = $args[0]
$rev = $args[1]
$user = $args[2]
$propname = $args[3]
$action = $args[4]
# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
[Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
exit 1
}
# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
[Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
exit 2
}
# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
# Log message is empty. Show the error.
[Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
exit 3
}
exit 0
这批脚本,只允许"svnmgr"用户的变化修订的性质:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
有关PC用户: 基于Windows Server MACHING使用时,.bat扩展名并没有为我工作。我用的VisualSVN作为德贾戈·赖因哈特建议,它创建了一个带有.cmd扩展的钩。