2008-08-08 88 views

回答

0

我认为最常见的是让人们在改编后改变修订意见。

您需要启用'pre-revprop-change'钩子脚本才能允许。提供的示例(如果启用)允许仅编辑注释属性,并且只能是原始的comitter。伟大的纠正错别字。

3

在我的工作场所,我们设置了一个提交后挂钩,可生成显示在各种仪表盘中的RSS提要,供代码审阅人员用来了解何时需要查看以及如何查看新的员工足够承诺。

1

我正在使用post-commit挂钩(I think it's this one)将消息发布到Basecamp上的每个提交的论坛。优势二:

  1. 作为首席开发者,我得到每天早上(从大本营论坛通过RSS feed)的汇总提交的,可以看看我的团队已经很快了达。

  2. 我们的Trac/SVN安装在我们的防火墙后面,所以这给了我在其他位置的上游一个窗口,让我们看到我们正在做的事情。他们可能不理解,但给经理有很多活动的样子,好了,很多活动;)

我想这样做的最终结果是类似于@Aviv在做什么。

我正在研究在持续集成的单独服务器上构建最新提交的解决方案,但是我将不得不改变我们在数据库模式更改之前进行更改的方式。

0

挂钩通知bug /问题管理系统存储库的更改。 IE浏览器。提交消息有问题:546或类似的标签被解析并提供给bug管理系统。

0

我们检查我们的钩子脚本如下:

  • 一个提交日志信息已被供应
  • 这审阅已为提交
  • 那没有自动生成的代码或禁止的文件中指定土地类型了在仓库中
  • 发送电子邮件了创建分支/标记时

我们仍然要执行下列规定:

  • 当用户获取关于文件
  • 锁发送电子邮件时,您的锁已被盗窃
  • 当修改发送电子邮件给大家发送电子邮件财产已被更改
3

我们使用他们的几件事情:

  • 与bug跟踪系统集成(Trac in our case - 提交消息,说“关闭#514”自动标志着错误的封闭
  • 与构建集成(buildbot in our case整合 - 提交到观看分支触发构建
  • 预提交用于验证commit钩子 - 我们使用svnchecker。这验证了我们的Python代码为PEP8 correctness
  • 送签邮件到邮件列表
  • 运行压痕脚本
4

我们使用FogBugz的错误跟踪,它提供了颠覆提交脚本,可包括在一个案例号您在检查注释,然后将错误与检查中的错误相关联。它确实需要设置一个WebSVN实例,以便为您的存储库提供基于Web的查看器。

0

我们使用提交挂钩脚本触发我们的发布机器人。将新版本信息写入我们不同产品中名为changes.txt的文件将触发创建标签和相关工件。

0

我有一个使用Ruby Tinder库的设置,我发送到一个篝火房间,如果有人想要我可以发布或发送代码给你的脚本。

我见过的其他常见类型是bug追踪系统和电子邮件通知。

7

如果你有混合使用unix和Windows用户的仓库,我建议你使用预先提交钩子脚本作为预防措施。它可以防止难以分类的情况,其中svn updates fail for Windows users because of a file rename which only changed the case of the file name。相信我,这是一个很好的机会,它可以为你节省麻烦。

+0

我不明白为什么这仍然是一个问题。对于特定的注册表更改,Windows XP及更高版本可能会区分大小写。它只是客户端实用程序,例如不支持它的TortoiseSVN。这些客户端svn实用程序安装时,应该是安装程序选项来设置此注册表。 – TamusJRoyce 2011-07-27 14:20:45

1

这在前面的Subversion用户邮件列表中已经讨论过了。 This特别是有一些有用的想法。

60

我使用的是pre-revprop-change挂钩,使实际回去后提交已执行编辑的意见和这样的信息。如果提交注释中缺少错误信息,这非常有用。

在这里,我发布了一个pre-revprop-change.bat批处理文件的Windows NT或更高版本...你 可以肯定,增加更多的修改。您也可以从中获得一个 post-revprop-change.cmd备份旧snv:log某处,或只是将其追加为新的日志...

唯一棘手的部分是能够真正从 批处理文件解析标准输入。 ..这是通过FIND.EXE命令完成的。

另一方面,这是我从其他用户那里收到关于使用/bexit命令的问题的报告。如果错误情况表现不佳,您可能只需要在特定应用程序中删除该/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 
+0

谢谢,这非常有用。 – ziggy 2012-02-10 12:52:00

0

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 
1

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 
0

我忘了,同时承诺输入注释。没有时间弄清楚为什么我的pre-revprop-change钩子不工作。所以下面的svnadmin命令工作对我来说,进入一个提交信息: svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk, 其中“垃圾”是含有我想成为注释的文本文件。 svn setlog help有更多使用信息...