分享常用/有用的SVN预提交钩子

40

有哪些常用且有用的 SVN 预提交钩子?


16
每月的偶数日对某个特定用户无效的那个? - crashmstr
你提出的问题似乎是主观的,很可能会被关闭。 - Michael Myers
这个是否应该是社区维基?这是主观的,也没有要求解决特定的问题。 - Dan Davies Brackett
我认为它可以被编辑成实际有用的东西,但在当前状态下应该被关闭。 - Instantsoup
2
确实这是主观的,但它可以教我们人们使用的钩子,这比“你最喜欢的漫画连环画是什么”更有用(尽管不太有趣)。对所有回答的人提出一个请求 - 如果可能的话,您能否发布钩子的代码? - David Rabinowitz
一个关于在 SVN 预提交钩子中有用的事情的问题会既有用又有趣,但这不是这个问题。除非它被编辑过。 - Michael Myers
22个回答

45

用户实际输入了评论并且其中包含特定问题号以进行跟踪。


2
为什么会被踩? - Instantsoup
13
可能是某人不喜欢留下评论!;) - John Feminella
3
强制使用问题编号可能不是人们的首选。我能看到它的好处,但如果我发现一个小错误,直接修复比登录缺陷系统并记录一个新问题更容易。这取决于您的流程和工具,但我可以理解那些不喜欢强制执行的人。 - Macke
7
确实立即修复问题更容易。不幸的是,没有审计过程。我们强制使用问题编号,以便我们的质量保证部门可以验证错误修复是否已经进入生产分支和主干,以避免出现回归问题。 - Instantsoup
1
我不喜欢“特定问题跟踪”部分,因为它会带来麻烦。如果真的有缺陷,那么我喜欢将其连接到漏洞上的想法。然而,如果我正在创建一个新功能,现在我必须创建一个错误才能提交代码。杂乱无章的。此外,当前工具中没有很好的方法根据修改的代码上下文链接错误,因此我们经常需要进行无休止的搜索才能找到我们想要的更改。我们的软件主管认为这个钩子是个好主意,但我不这样认为。 - San Jacinto
显示剩余5条评论

20

检查各种文本文件中是否存在绝对路径(例如VRML、XML等)。大多数已经检查过的代码不应该有绝对路径,但某些人和工具坚持要制作硬编码的东西。


从来没有想过通过预提交来解决这个问题... - powtac
经过足够多次失败的修订后,我只是为自己实现了这个功能(我现在已经转向使用分布式版本控制系统,这使得我们可以继续提交,直到有问题的代码段足够好以便于合并)。然而,当钩子阻止他们的错误变成公开时,那些人一直很高兴,因此添加这些功能是一个好主意。 - Macke

13

我对提交的消息进行字数统计。它们需要五个或更多单词。这导致了一些滑稽的侮辱我的事情发生...


1

配置部分

$numberOfWords = 3; $svnlook = '/usr/bin/svnlook';#-------------------------------------------- $repos = $ARGV[0]; $txn = $ARGV[1]; $comment = $svnlook log -t "$txn" "$repos"; chomp($comment);if ( $comment !~ m/((\b[\S]{2,}\b)\s*){$numberOfWords,}/ ) { print STDERR "请在提交信息中输入更多细节。\n"; exit(1); }exit(0);
- sleep-er

13
  • 检查是否有制表符并拒绝提交。
  • 检查不一致的行尾并拒绝提交。
  • 检查是否存在"CR:[用户名]",如果没有代码审查,则拒绝提交。

检查制表符?你是什么意思? - demoncodemonkey
1
@demoncodemonkey - 编码规范中常见的一项是指定程序员应该使用制表符还是空格进行缩进。在严格执行编码规范的项目中,预提交钩子可以检测到(例如)使用制表符进行缩进的行,并拒绝提交或自动将它们转换为空格。 - bta
是的,应该检查“制表符或空格,无论你的编码风格指定什么。”就我个人而言,我更喜欢使用空格,但这是一场不同的圣战。 :) - i_am_jorf
1
检查制表符并拒绝提交。你能分享这个吗? - jpo38
嘿,那是多年前的事了。我现在没有它了。 - i_am_jorf

11

第一个链接中的脚本链接已经失效。第二个链接是好的。https://svn.apache.org/repos/asf/subversion/branches/scons-build-system/www/tools_contrib.html#hook_scripts - Nicolaj Schweitz

8
我们有一个提交后钩子,将消息发布到Twitter账户。使用twitsvn(免责声明:我是该项目的提交者)。
或许有些傻?但这证明对于一些版本控制方面有挑战的团队成员来说,这是与库进行交流的好方法。一旦SVN通过他们的Twitter客户端与他们对话,它就不再像黑匣子一样了。

电子邮件已经过时了... - Roger

8

我喜欢使用svn钩子来实现以下目的:

  • 强制执行更严格的代码风格要点
  • 检查明显的语法错误
  • 确保特殊的Trac关键字,如“Fixes”或“Addresses”,实际上位于相应的问题编号之前

7

我会检查文件类型,确保不会意外提交某些禁止的类型(例如.obj、.pdb)。自从有人第一次提交了2GB的编译器生成的临时文件后,这种情况就再也没有发生过。

对于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

3
应该在svn:ignore中完成这个操作,而不是在pre-commit钩子中。 - user177800
4
我不太确定-我们正在讨论“通用”的忽略模式,因此,除非您希望在每个目录中都忽略属性(这样如果您需要添加新模式,修改将变得困难),否则您需要更加“集中”的东西。我认为SVN缺少真正的全局属性(例如保存在服务器上而不是每个客户端上)。 - gbjbaanb

6
在我目前工作的公司中,我们会检查以下内容:
  • 二进制文件是否需要加锁属性;
  • Java文件是否有标准的版权声明,并且是否包含当前年份;
  • 代码格式是否正确(我们使用Jalopy进行代码格式化)- 这听起来可能很傻,但实际上可以使不同版本之间的文本比较更容易;
  • 代码是否有提交信息;
  • 目录结构是否符合规定(所有项目都应该在一个定义好的SVN文件夹下,每个项目都应该有tags、branch和trunk文件夹);
我想这就是全部了。
我喜欢检查提交是否与任务关联的想法;对我来说这真的很有意义。

6

我使用一个post-commit钩子将作者属性从我们的ldap树中的员工ID重写为友好名称。(身份验证使用员工ID)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接