我想在存储库浏览器中编辑日志注释,并收到一条错误消息,指出存储库不存在pre-revprop-change挂钩。除了有一个可怕的名字,什么是pre-revprop-change钩子,以及如何创建它?什么是SVN中的pre-revprop-change钩子,以及如何创建它?
回答
基本上它是一个脚本,在版本库上修改了未修订版本的属性之前启动,以便您可以更准确地管理存储库中正在发生的事情。
SVN distrib中有一些针对不同钩子的模板,它们位于/ hooks子目录(* .tmpl,您必须根据您的操作系统进行编辑和重命名才能激活)。
所有说明都在钩子模板脚本中。如果你需要一个`svnsync`镜像钩子,那么缺省脚本将需要改变,因为它只允许修改svn:log。 Svnsync的变化不止于此,所以我只是在里面放置一个'exit 0'来允许所有的属性改变(因为这只对我来说是一面镜子)。 – 2010-12-11 21:07:50
...然后将其保存为`pre-revprop-change`到相同的目录,并使其可在Web服务器用户(Linux)上执行。 – Mateng 2012-08-31 18:18:20
对于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
可以链接到该版本http://stackoverflow.com/questions/6155/common-types-of-subversion-hooks/68850#68850。我写了这个钩子,并在前一段时间发布在SVN论坛上。我想我应该在评论中加入一些信用。 – 2009-07-10 11:38:16
这里是链接到堆栈溢出问题有许多共同的挂钩Common Types of Subversion Hooks,包括pre-revprop-change
挂钩的Windows这里同时张贴的原始来源。
你应该参考一下,因为他们可能会随着时间的推移而改进。
对于PC用户: 在Windows Server机器上使用时,.bat扩展名对我无效。我用Django Reinhardt建议的VisualSvn,它创建了一个扩展名为.cmd的钩子。
感谢#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
挂钩脚本的目的是控制未版本化(修订)属性的更改并发送通知(例如,在修订版本属性发生变化时发送电子邮件)。
有Subversion的2种属性:
- 版本的特性(例如
svn:needs-lock
和svn:mime-type
),可以对文件和目录进行设置, - 未版本控制(修订版)的特性(例如
svn:log
和svn:date
)这是在版本库修订版上设置的。
版本化属性具有历史记录,可以由具有对存储库的读/写访问权限的普通用户操作。另一方面,未版本控制的属性没有任何历史记录,主要用于维护目的。例如,如果您提交修订,它会立即得到您提交的UTC时间为svn:date
,您的用户名为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
对于Linux允许日志注释的版本,
- 找到该文件
pre-revprop-change.tmpl
在存储库的hooks
目录 - 将文件复制到同一个目录,将其重命名为
pre-revprop-change
- 给予文件的执行权限(对于服务器用户,例如,
www-data
)
编辑:(感谢lindes)
-
后
- ,你可能需要编辑脚本的那种编辑的返回
0
出口值,要允许。
- 1. 什么是SHA-256?以及如何在Java中创建它?
- 2. 什么是动画以及如何创建它?
- 3. 什么是(XCode)SVN存储库以及如何使用它
- 4. 什么是SS_X_JSESSIONID以及何时创建?
- 5. 什么是API Web服务,您如何创建它们以及为什么?
- 6. 什么是(void(**)())以及如何typedef它?
- 7. JavaScript中的内存泄漏:它们是什么,如何识别它们以及如何创建它们
- 8. 什么是深度链接,以及如何为App Store创建它?
- 9. 什么是Android以及他们为什么创建新的VM?
- 10. mac中的sh进程是什么以及如何杀死它
- 11. AngularJs Material中的defaultIconSet()是什么以及我如何使用它?
- 12. activeandroid中的mId是什么以及它何时可以为null?
- 13. 如何创建一个SVN pre-commit钩子commiting到仓库
- 14. 什么是合同类以及它是如何使用的
- 15. 什么是Flash .SWC文件以及它是如何使用的?
- 16. Plist:它是什么以及如何使用它
- 17. ObjectSpace - 它是什么以及人们如何使用它?
- 18. 什么是NULL值,以及如何在SQLite中处理它们
- 19. 如何在sugarcrm中创建钩子
- 20. WMI - 它究竟如何工作?什么是创建WmiApSrv.exe服务以及它如何发送消息?
- 21. EJB。什么是它为什么存在以及它如何工作?
- 22. NPTL:什么是MULTIPLE_THREADS_OFFSET以及它是如何设置
- 23. ReactTransitionGroup钩子中的回调是什么?
- 24. 什么是PHP中的钩子?
- 25. 这是什么类型的对象以及如何使用它?
- 26. 什么是Control的DesignMode属性以及如何使用它?
- 27. 这个错误指的是什么,以及如何解决它?
- 28. 什么是PHP的PATH变量,以及如何添加到它?
- 29. 为什么PWD是空的以及如何解决它?
- 30. 什么是MySQL中的锁定以及何时使用它?
现在这个链接是第二个,只是在这个问题的链接:) – ULysses 2010-08-05 10:11:44
关于导致非常过时的SVNBook 1.0的链接。目前的版本是1.7和1.8(每晚):http://svnbook.red-bean.com/en/1.8/ – bahrep 2013-12-05 09:04:52