SVN预提交问题

Gaj*_*nan 2 svn pre-commit-hook

我在网上发现了这个脚本,很少有人说他们正在为他们的存储库工作.该脚本允许预先提交检查以在检查时强制检查注释.问题是我将它添加到SVN中的hooks目录,现在所有提交(甚至是带注释的提交)都失败并显示此错误消息 "提交被预提交阻止(退出代码255)没有输出"

现在,我无法更改脚本或删除它,因为我得到相同的错误.有关如何还原此预提交脚本的任何建议?

#!/bin/bash # [1] REPOS-PATH (the path to this repository) # [2] TXN-NAME (the name of the txn about to be committed) REPOS="$1" REV="$2" @echo off :: :: Stops commits that have empty log messages. :: @echo off setlocal # rem Subversion sends through the path to the repository and transaction id set REPOS=%1 set TXN=%2 # rem check for an empty log message svnlook log %REPOS% -t %TXN% | findstr . > nul if %errorlevel% gtr 0 (goto err) else exit 0 :err echo. 1>&2 echo Your commit has been blocked because you didn't give any log message 1>&2 echo Please write a log message describing the purpose of your changes and 1>&2 echo then try committing again. -- Thank you 1>&2 exit 1
Run Code Online (Sandbox Code Playgroud)

Dav*_* W. 5

这意味着它甚至没有执行你的钩子.每当你收到这样的错误时,它可能意味着几件事:

  • 脚本顶部的shebang不正确.也许在您的系统上,没有BASH shell或BASH shell位于/ usr/local/bin/bash或/ usr/share/bin/bash.不太可能在Linux系统上,但很可能在Solaris上.检查一下.
  • 该脚本没有设置可执行位.你需要chmod +x在你的脚本上做一个.
  • 预提交shell脚本无法调用脚本本身.看一下pre-commithook目录中的脚本,确保它正在调用你的脚本.或者,您已将脚本重命名为pre-commit并将其放入该目录中.

另一种可能性(仔细查看您的脚本)是您将pre-commitBASH脚本与pre-commit.batWindows shell版本混淆.您的语法是脚本后半部分的Windows shell,但上半部分是BASH shell.

这是我的预提交钩子.它在Perl中,因此它适用于Windows和Unix/Linux/Mac.您必须在Windows机器上安装ActivePerlStrawberry Perl,但这两者都是免费和开源的.

我的预提交脚本可以做几件事,比如确保人们不会通过允许人们创建标签而不是修改标签来意外更改标签.

我的脚本还允许使用提交注释进行更多检查.例如,您使用错误跟踪系统吗?您可以设置我的钩子以在提交注释中要求错误跟踪ID.

另一种可能性(我真正推荐的是)使用像Jenkins这样的连续构建工具.Jenkins自动执行构建,并将在每次提交时运行测试.这可以确保尽早发现错误而不是说后期制作.

Jenkins的一大优势在于它提供了一个漂亮的网页,其中包含各种信息,例如谁做出了更改以及他们做了哪些更改.开发人员发现这非常有用,他们会自动开始提交好的提交注释,而不会被问到.令人惊讶的是,我可以通过Subversion更改日志并确定我开始使用Jenkins的确切时刻.

在预提交脚本中,您只需检查空注释.如果您的开发人员不想发表评论,您将开始获得评论,changed code并且adaadsdasdasda只是为了允许提交通过.像Jenkins这样的东西,开发人员实际上开始自己提交好的提交评论.