Subversion使用哪种钩子脚本?只是一般的想法,但代码也会很棒!Subversion挂钩的常见类型
回答
我认为最常见的是让人们在改编后改变修订意见。
您需要启用'pre-revprop-change'钩子脚本才能允许。提供的示例(如果启用)允许仅编辑注释属性,并且只能是原始的comitter。伟大的纠正错别字。
在我的工作场所,我们设置了一个提交后挂钩,可生成显示在各种仪表盘中的RSS提要,供代码审阅人员用来了解何时需要查看以及如何查看新的员工足够承诺。
我正在使用post-commit挂钩(I think it's this one)将消息发布到Basecamp上的每个提交的论坛。优势二:
作为首席开发者,我得到每天早上(从大本营论坛通过RSS feed)的汇总提交的,可以看看我的团队已经很快了达。
我们的Trac/SVN安装在我们的防火墙后面,所以这给了我在其他位置的上游一个窗口,让我们看到我们正在做的事情。他们可能不理解,但给经理有很多活动的样子,好了,很多活动;)
我想这样做的最终结果是类似于@Aviv在做什么。
我正在研究在持续集成的单独服务器上构建最新提交的解决方案,但是我将不得不改变我们在数据库模式更改之前进行更改的方式。
挂钩通知bug /问题管理系统存储库的更改。 IE浏览器。提交消息有问题:546或类似的标签被解析并提供给bug管理系统。
我们检查我们的钩子脚本如下:
- 一个提交日志信息已被供应
- 这审阅已为提交
- 那没有自动生成的代码或禁止的文件中指定土地类型了在仓库中
- 发送电子邮件了创建分支/标记时
我们仍然要执行下列规定:
- 当用户获取关于文件
- 锁发送电子邮件时,您的锁已被盗窃
- 当修改发送电子邮件给大家发送电子邮件财产已被更改
我们使用他们的几件事情:
- 与bug跟踪系统集成(Trac in our case - 提交消息,说“关闭#514”自动标志着错误的封闭
- 与构建集成(buildbot in our case整合 - 提交到观看分支触发构建
- 预提交用于验证commit钩子 - 我们使用svnchecker。这验证了我们的Python代码为PEP8 correctness
- 送签邮件到邮件列表
- 运行压痕脚本
我们使用提交挂钩脚本触发我们的发布机器人。将新版本信息写入我们不同产品中名为changes.txt的文件将触发创建标签和相关工件。
我有一个使用Ruby Tinder库的设置,我发送到一个篝火房间,如果有人想要我可以发布或发送代码给你的脚本。
我见过的其他常见类型是bug追踪系统和电子邮件通知。
如果你有混合使用unix和Windows用户的仓库,我建议你使用预先提交钩子脚本作为预防措施。它可以防止难以分类的情况,其中svn updates fail for Windows users because of a file rename which only changed the case of the file name。相信我,这是一个很好的机会,它可以为你节省麻烦。
这在前面的Subversion用户邮件列表中已经讨论过了。 This特别是有一些有用的想法。
我使用的是pre-revprop-change
挂钩,使实际回去后提交已执行编辑的意见和这样的信息。如果提交注释中缺少错误信息,这非常有用。
在这里,我发布了一个pre-revprop-change.bat
批处理文件的Windows NT或更高版本...你 可以肯定,增加更多的修改。您也可以从中获得一个 post-revprop-change.cmd
备份旧snv:log
某处,或只是将其追加为新的日志...
唯一棘手的部分是能够真正从 批处理文件解析标准输入。 ..这是通过FIND.EXE
命令完成的。
另一方面,这是我从其他用户那里收到关于使用/b
和exit
命令的问题的报告。如果错误情况表现不佳,您可能只需要在特定应用程序中删除该/b
。
@ECHO OFF
set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow changes to svn:log. The author, date and other revision
:: properties cannot be changed
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow modifications to svn:log (no addition/overwrite or deletion)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%action%'=='M' goto ERROR_ACTION
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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 properties are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log revision properties 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
谢谢,这非常有用。 – ziggy 2012-02-10 12:52:00
Windows预提交挂钩来检查日志是否包含某些内容。
@ECHO OFF
setlocal
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Get subversion arguments
set repos=%~1
set txn=%2
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Set some variables
set svnlookparam="%repos%" -t %txn%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
set bIsEmpty=true
for /f "tokens=* usebackq" %%g in (`svnlook log %svnlookparam%`) do (
set bIsEmpty=false
)
if '%bIsEmpty%'=='true' goto ERROR_EMPTY
echo Allowed. >&2
goto :END
:ERROR_EMPTY
echo Empty log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
:: You may require to remove the /b below if your hook is called directly by subversion
exit /b 1
:END
endlocal
post-commit挂钩发送电子邮件通知,指出存储库中的某些内容已更改为电子邮件列表。您在同一文件夹需要sendmail.exe比你的钩子文件,用sendmail.ini一起。
您还需要旁边的后commit.cmd文件后commit.tos.txt列出的邮件收件人。该文件应包含:
[email protected],[email protected],[email protected]
这里是钩代码:
@ECHO OFF
setlocal
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Get subversion arguments
set repos=%~1
set rev=%2
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Set some variables
set tos=%repos%\hooks\%~n0.tos.txt
set reposname=%~nx1
set svnlookparam="%repos%" --revision %rev%
if not exist "%tos%" goto :END
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Prepare sendmail email file
set author=
for /f "tokens=* usebackq" %%g in (`svnlook author %svnlookparam%`) do (
set author=%%g
)
for /f "tokens=* usebackq delims=" %%g in ("%tos%") do (
set EmailNotificationTo=%%g
)
set SendMailFile=%~n0_%reposname%_%rev%.sm
echo To: %EmailNotificationTo% >> "%SendMailFile%"
echo From: %reposname%[email protected] >> "%SendMailFile%"
echo Subject: [%reposname%] Revision %rev% - Subversion Commit Notification >> "%SendMailFile%"
echo --- log [%author%] --- >> "%SendMailFile%"
svnlook log %svnlookparam% >> "%SendMailFile%" 2>&1
echo --- changed --- >> "%SendMailFile%"
svnlook changed %svnlookparam% --copy-info >> "%SendMailFile%" 2>&1
echo .>> "%SendMailFile%"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Send email
type "%SendMailFile%" | "%~dp0sendmail.exe" -t
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Clean-up
if exist "%SendMailFile%" del "%SendMailFile%"
:END
endlocal
我忘了,同时承诺输入注释。没有时间弄清楚为什么我的pre-revprop-change钩子不工作。所以下面的svnadmin命令工作对我来说,进入一个提交信息: svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk
, 其中“垃圾”是含有我想成为注释的文本文件。 svn setlog help
有更多使用信息...
对于那些谁正在寻找的pre-revprop-change.bat为snvsync操作:
https://gist.github.com/1679659
@ECHO OFF
set user=%3
if /I '%user%'=='syncuser' goto ERROR_REV
exit 0
:ERROR_REV echo "Only the syncuser user may change revision properties" >&2
exit 1
它只是来自这里:http://chestofbooks.com/computers/revision-control/subversion-svn/Repository-Replication-Reposadmin-Maint-Replication.html并且已经适用于Windows。
- 1. Subversion挂钩问题
- 2. Subversion提交后挂钩
- 3. CruiseControl.NET不执行Subversion挂钩脚本
- 4. Subversion失败后提交挂钩?
- 5. 挂钩使Subversion只读特定用户
- 6. 文件类型检查SVN挂钩
- 7. 挂钩到类库的“OnLoad”
- 8. 灰烬模型挂钩({})
- 9. Subversion中的钩子
- 10. .NET SOAP常见类型
- 11. SetParent挂钩,你怎么解除挂钩?
- 12. 在挂钩程序中访问挂钩
- 13. 监视TFS服务挂钩/ Web挂钩
- 14. 鱼眼中哪些class/jar文件挂钩了subversion和GIT?
- 15. 是否可以在Subversion中创建自定义挂钩事件
- 16. Subversion挂钩是否可以使用文件URL?
- 17. Subversion SVN:持续集成后提交挂钩?
- 18. 如何为每个存储库生成Subversion挂钩模板?
- 19. woocommerce_before_calculate_totals挂钩不能正常工作
- 20. 搜索挂钩无法正常工作
- 21. Codeigniter挂钩重新实现我的类
- 22. Xposed - 如何挂钩Date类的Android
- 23. 是否可以将SVN挂钩添加到类似于git挂钩的NPM?
- 24. 常见的数据类型在Java
- 25. PR_Write挂钩后
- 26. matplotlib挂钩
- 27. 挂钩ADO.Net
- 28. Wordpress挂钩
- 29. Codeigniter挂钩
- 30. Windows DNS挂钩
我不明白为什么这仍然是一个问题。对于特定的注册表更改,Windows XP及更高版本可能会区分大小写。它只是客户端实用程序,例如不支持它的TortoiseSVN。这些客户端svn实用程序安装时,应该是安装程序选项来设置此注册表。 – TamusJRoyce 2011-07-27 14:20:45