共享通用/有用的SVN预提交挂钩

pow*_*tac 40 svn version-control hook pre-commit svn-hooks

SVN有哪些常见和/或有用的预提交钩子?

Jon*_*Jon 45

用户实际上已在提交消息上输入了注释,并且它包含要跟踪的特定问题编号.

  • 可能是一个不喜欢留言的人!;) (13认同)
  • 它肯定更容易立即修复.不幸的是,没有审计.我们强制执行问题编号,以便我们的质量保证部门可以验证错误修复,使其进入生产分支和主干,以避免回归. (7认同)
  • 可能是强制发行号不是最喜欢的.我可以看到好东西,但是如果我发现一个小错误,那么直接修复它比登录错误系统并为它记录新问题更容易.这取决于您的流程和工具,但我可以理解那些不喜欢执行的人. (3认同)
  • 为什么这会得到一次投票? (2认同)

Mac*_*cke 20

检查各种文本文件中的绝对路径(即VRML,XML等).大多数签入的代码应该永远不会有绝对路径,但有些人和工具坚持生成硬编码的东西.


Ben*_*n S 13

我对提交消息进行了重视.他们需要5个字或更多.这导致一些喜剧侮辱我...


i_a*_*orf 13

  • 检查标签并拒绝办理登机手续.
  • 检查线路结尾是否不一致并拒绝办理登机手续.
  • 检查是否出现"CR:[用户名]",如果没有代码审查,则拒绝办理登机手续.


Chr*_* K. 11

您可能需要查看:http: //svn.apache.org/repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts(此页面可能已过时显然不再维护for Subversion 1.7)

或直接访问:https: //svn.apache.org/repos/asf/subversion/trunk/contrib/


Joh*_*lla 8

我喜欢使用svn钩子:

  • 强制执行更严格的代码风格
  • 检查明显的语法错误
  • 确保特殊的Trac关键字(如"修复"或"地址")实际位于相应的问题编号之前


fit*_*ele 8

我们有一个帖子提交钩子,将消息发布到Twitter帐户.使用twitsvn(免责声明:我是该项目的提交者).

愚蠢?也许......但事实证明这是一个很好的方式,让我们将我们的存储库的一些信息传达给一些受版本控制挑战的团队成员.一旦SVN开始通过他们的Twitter客户端与他们交谈,它就不会像黑盒子那样感觉到.


gbj*_*anb 7

我检查文件类型并确保某些禁止的类型不是偶然提交的(例如.obj,.pdb).好吧,不是因为第一次有人检查2 gig编译器生成的临时文件:(

对于Windows:


@echo off

svnlook log -t "%2" "%1" | c:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 goto DISALLOWED

echo Please enter a check-in comment 1>&2
exit 1


:DISALLOWED
svnlook changed -t %2 %1 > c:\temp\pre-commit.txt

findstr /G:"%1\hooks\ignore-matches.txt"  c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit /b 0

echo disallowed file extension >> c:\temp\precommit-bad.txt
type c:\temp\precommit-bad.txt 1>&2
exit 1
Run Code Online (Sandbox Code Playgroud)

  • 我不太确定 - 我们正在谈论'通用'忽略模式,所以除非你想要忽略每个目录中的属性(因此如果你需要添加一个新模式就很难修改),你需要一些更"集中"的东西.我认为svn缺少真正的全局属性(例如,在服务器上保存,而不是每个客户端) (4认同)
  • 实际上这应该在svn中完成:忽略不在预提交钩子中. (3认同)

小智 6

我使用post-commit钩子将author属性重写为ldap树中的友好名称.(身份验证与员工ID)


gre*_*b64 6

我们在归档文件中提供的一个很好的提交钩子是检查所有.VCPROJ(或.CSPROJ)可视化工作室项目,以确保输出目录不会更改为本地的任何内容(通常用于调试).

这些问题将正确编译,但由于缺少可执行文件仍会破坏构建.


Rav*_*lau 6

在我目前工作的公司中,这是检查:

  • 如果二进制文件有需要锁定属性设置;
  • 如果Java文件具有标准版权声明,并且包含当前年份;
  • 如果代码格式正确(我们使用Jalopy进行代码格式化) - 这可能听起来很愚蠢,但它实际上使得不同版本之间的文本比较更容易;
  • 如果代码有提交消息;
  • 如果目录结构符合定义的内容(所有项目都应该在定义的SVN文件夹下,并且每个项目都应该有一个标签,branch和trunk文件夹);

我猜就是这样.

我喜欢检查提交是否与票证相关联的想法; 它实际上对我很有意义.


Ada*_*tek 5

有些人更喜欢为给定语言运行类似lint的工具来查找代码中的常见问题和/或强制执行编码风格.然而,在一个小而熟练的团队中,我更愿意允许每个提交在持续集成和/或代码审查期间处理并处理可能的问题.多亏了这个提交速度更快,鼓励更频繁的提交,从而更容易集成.