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

时间:2009-05-19 19:31:24

标签: svn version-control hook svn-hooks pre-commit

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

22 个答案:

答案 0 :(得分:45)

用户实际上已在提交消息中输入评论,并且其中包含要跟踪的特定问题编号。

答案 1 :(得分:20)

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

答案 2 :(得分:13)

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

答案 3 :(得分:13)

  • 检查标签并拒绝 报到。
  • 检查线路是否不一致 结束并拒绝办理登机手续。
  • 检查是否出现“CR: [用户名]“并拒绝办理登机手续 如果没有代码审查。

答案 4 :(得分:11)

你可能想看看: http://svn.apache.org/repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts(这个页面可能已经过时了,显然它不再适用于Subversion 1.7)

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

答案 5 :(得分:8)

我喜欢使用svn挂钩:

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

答案 6 :(得分:8)

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

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

答案 7 :(得分:7)

我检查文件类型并确保没有意外提交某些禁用类型(例如.obj,.pdb)。好吧,自从第一次有人签入2 gig编译器生成的临时文件时就没有了:(

for 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

答案 8 :(得分:6)

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

答案 9 :(得分:6)

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

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

答案 10 :(得分:6)

在我目前正在处理的公司中,我们会检查:

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

我想就是这样。

我喜欢检查提交是否与故障单相关联的想法;它实际上对我很有意义。

答案 11 :(得分:5)

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

答案 12 :(得分:3)

我使用check-mime-type.pl pre-commit hook检查提交的文件上是否设置了MIME类型和行尾选项。我使用subversion发布使用DAV在网站上可见的文件,并且所有没有MIME类型集的文件都作为文本文件提供(例如,HTML源代码显示在浏览器而不是渲染标记中)。

答案 13 :(得分:2)

我使用以下钩子脚本来确保源代码的行结尾和shell脚本的权限是正确的(当有人在一切正常并且打破unix构建时检查窗口时,这是令人沮丧的。)

#!/bin/bash

REPOS="$1"
TXN="$2"

# Exit on all errors.
set -e
SVNLOOK=svnlook
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
  if [[ $REPOS_PATH =~ A[[:blank:]]{3}(.*)\.(sh|c|h|cpp) ]]
  then
    if [ ${#BASH_REMATCH[*]} -ge 2 ]
        then
    FILENAME=${BASH_REMATCH[1]}.${BASH_REMATCH[2]};

    # Make sure shell scripts are executable
    if [[ sh == ${BASH_REMATCH[2]} ]]
    then
        EX_VALUE="true"
            if [ -z "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:executable \"$FILENAME\" 2> /dev/null`" ]
            then
            ERROR=1;
                echo "svn ps svn:executable $EX_VALUE \"$FILENAME\"" >&2
        fi
        EOL_STYLE="LF"
    else
        EOL_STYLE="native"
    fi

    # Make sure every file has the right svn:eol-style property set
        if [ $EOL_STYLE != "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:eol-style \"$FILENAME\" 2> /dev/null`" ]
        then
        ERROR=1;
            echo "svn ps svn:eol-style $EOL_STYLE \"$FILENAME\"" >&2
    fi
    fi
  fi
  test -z $ERROR || (echo "Please execute above commands to correct svn property settings." >& 2; exit 1)
done

答案 14 :(得分:2)

我们使用预提交和后提交钩子组合来自动使用svn提交中的相关条目更新bugzilla。

我们使用第二个(预提交)挂钩来确保在将文件添加到repostitory之前在文件上设置相应的svn:eol-style和svn:keywords属性。

我们有第三个(提交后)挂钩来启动构建并在构建被破坏时邮寄结果,并在构建再次修复时通知每个人。

我们有第四个(提交后)挂钩启动svn复制,以确保异地复制尽可能最新。

不幸的是,我无法将源发布到这些,但是,除了Bugzilla集成之外,它们很容易实现,Hudson可能是持续集成的更好选择。

对于bugzilla集成,我建议查看scmbug

答案 15 :(得分:2)

它有一个提交消息,它是!=而不是“bug fix”。该死,我讨厌那些无用的消息!

答案 16 :(得分:2)

在Mantis bugtracker中插入一条注释,其中包含基于提交消息的更改列表详细信息,具有“问题#”等,通过RegEx。

答案 17 :(得分:1)

编译项目的钩子怎么样?例如运行make all。这确保没有人检查不编译的代码! :)

答案 18 :(得分:0)

使用PostUpdate和PreCommit

解决SVN 1.5中缺少文件外部的问题

答案 19 :(得分:0)

我喜欢在提交消息中检查[Reviewer:xyz]注释的钩子,并拒绝提交。

答案 20 :(得分:0)

我正在考虑编写一个来检查aspx / html文件上的doctype,只是为了确保每个人都使用正确的文件。

此外,您可以预先(或发布)提交挂钩将通知发送到您的CI服务器as described on the Hudson Blog

答案 21 :(得分:0)

我检查案例冲突(愚蠢的窗口)以及require-mergeinfo.pl以确保客户端至少为1.5 - 这样svn:mergeinfo将始终设置