40

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

4

22 回答 22

45

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

于 2009-05-19T19:33:24.947 回答
20

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

于 2009-05-19T19:52:18.043 回答
13

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

于 2009-05-19T19:34:19.110 回答
13
  • 检查标签并拒绝签入。
  • 检查不一致的行尾并拒绝签入。
  • 检查是否出现“CR:[用户名]”,如果没有代码审查,则拒绝签入。
于 2009-05-19T19:34:21.030 回答
11

您可能想看看: http: //svn.apache.org/repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts(此页面可能已过时,显然不再维护对于颠覆 1.7)

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

于 2010-08-05T10:40:55.563 回答
8

我喜欢使用svn钩子:

  • 执行更严格的代码风格点
  • 检查明显的语法错误
  • 确保像“Fixes”或“Addresses”这样的特殊 Trac 关键字实际上位于相应的问题编号之前
于 2009-05-19T19:35:16.080 回答
8

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

愚蠢的?也许......但事实证明,它是我们将存储库的进展情况传达给我们的一些版本控制挑战的团队成员的好方法。一旦 SVN 开始通过他们的 twitter 客户端与他们交谈,它就不再像一个黑匣子了。

于 2009-11-24T21:35:40.963 回答
7

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

对于窗户:


@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
于 2009-05-20T12:58:21.743 回答
6

我使用提交后挂钩将作者属性重写为来自 ldap 树的友好名称。(身份验证使用员工ID)

于 2009-08-27T14:43:53.517 回答
6

我们存档中的一个很棒的提交钩子是检查所有 .VCPROJ(或 .CSPROJ)Visual Studio 项目,以确保输出目录没有更改为本地的任何内容(通常用于调试)。

这些问题将正确编译,但仍会因为缺少可执行文件而中断构建。

于 2009-08-27T14:49:44.880 回答
6

在我目前工作的公司中,对此进行了检查:

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

我想就是这样。

我喜欢检查提交是否与票证相关联的想法;这对我来说真的很有意义。

于 2009-11-22T07:46:54.643 回答
5

有些人更喜欢为给定的语言运行类似 lint 的工具,以发现代码中的常见问题和/或强制编码风格。然而,在一个小型且技术娴熟的团队中,我更愿意让每个提交都通过并处理持续集成和/或代码审查期间可能出现的问题。由于这种提交速度更快,这鼓励了更频繁的提交,从而更容易集成。

于 2009-11-20T23:49:11.977 回答
3

I use the check-mime-type.pl pre-commit hook to check that MIME Type and End of line options are set on committed files. I use subversion to publish files to be visible on a website using DAV, and all files without the MIME Type set get served as text files (e.g. HTML source gets displayed in a browser instead of the rendered markup).

于 2009-11-22T22:23:33.390 回答
2

我们使用 pre-commit 和 post-commit 钩子组合来自动更新 bugzilla 与来自 svn 提交的相关条目。

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

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

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

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

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

于 2009-11-24T20:17:20.717 回答
2

根据通过 RegEx 具有“问题 #”等的提交消息,在 Mantis 错误跟踪器中插入一条带有更改列表详细信息的注释。

于 2009-05-19T20:07:14.503 回答
2

它有一个提交消息,它是 != 而不是“错误修复”。该死,我讨厌那些无用的信息吗!

于 2009-11-22T22:06:04.870 回答
2

我使用下面的钩子脚本来确保源代码的行尾和 shell 脚本的权限是正确的(当有人在 Windows 上签入而一切似乎都正常并破坏了 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
于 2011-04-20T14:49:18.697 回答
1

一个钩子来编译项目怎么样?例如运行make all。这样可以确保没有人检查无法编译的代码!:)

于 2009-11-20T09:16:56.963 回答
0

我检查大小写冲突(愚蠢的窗口)并且还需要-mergeinfo.pl 以确保客户端至少为 1.5 - 这样 svn:mergeinfo 将始终设置

于 2010-11-20T03:49:00.790 回答
0

使用 PostUpdate 和 PreCommit 解决 SVN 1.5 中缺少文件外部的问题

于 2009-11-21T19:39:16.570 回答
0

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

此外,您可以使用前(或后)提交挂钩将通知推送到您的 CI 服务器,如 Hudson 博客中所述

于 2010-07-16T14:26:17.457 回答
0

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

于 2010-06-22T18:11:52.660 回答