Svn 如何防止无注释的Subversion提交?

Svn 如何防止无注释的Subversion提交?,svn,hook,commit,Svn,Hook,Commit,有人知道在没有输入提交注释时如何防止提交到Subversion代码存储库吗?创建预提交挂钩。下面是一个示例钩子脚本,它将拒绝提交消息少于10个字符的任何内容。您可以使用钩子(将其放入/hooks并命名为pre-commit.bat(Windows)): src:实际上,当您创建Subversion存储库时,它的hooks子目录已经包含hook示例。查看名为pre-commit.tmpl的钩子参数详细信息。它还包含一个您正在寻找的钩子示例: #!/bin/sh REPOS="$1" TXN="$2

有人知道在没有输入提交注释时如何防止提交到Subversion代码存储库吗?

创建预提交挂钩。下面是一个示例钩子脚本,它将拒绝提交消息少于10个字符的任何内容。

您可以使用钩子(将其放入
/hooks
并命名为
pre-commit.bat
(Windows)):


src:

实际上,当您创建Subversion存储库时,它的
hooks
子目录已经包含hook示例。查看名为
pre-commit.tmpl
的钩子参数详细信息。它还包含一个您正在寻找的钩子示例:

#!/bin/sh
REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/local/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null || exit 1

您可以用任何脚本或语言编写钩子,只要它在Subversion机器上是可执行的。

这里是一个预提交钩子,其中包含@miku针对Linux的详细错误消息:

#!/bin/sh

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

SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null

GREP_STATUS=$?
if [ $GREP_STATUS -ne 0 ]
then
    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
fi
exit 0

超过15个字符的Linux脚本--


Source-

如果您仅使用TortoiseSVN,则可以将TortoiseSVN的属性添加到根目录: 属性名称:
tsvn:logminsize
值:
1
这将禁用TortoiseSVN提交窗口中的OK按钮,然后消息为空。
请注意,此属性是特定于TortoiseSVN的,它可能无法与其他SVN客户端一起使用。

+1,当然这不能强制用户使用有意义的注释。svncommit-m“foo”foo.h仍然可以工作,“>nul”部分用于什么?它的目的是什么?很好,这个钩子在客户端还是服务器端工作?理想情况下,我希望它能在服务器端工作,以防止每个人在没有提交消息的情况下提交。请注意,挂钩只能防止意外提交而没有注释。除非你教育你的用户,否则他们只会用“修复bug”之类的东西来代替,这比一条空消息没有任何好处。我同意Thilo的观点。如果你的目的是为了防止在没有评论的情况下提交时出现错误,那么这里提供的解决方案将起作用。如果你想通过强迫用户发表评论来迫使用户提供有意义的评论,他们将在所有提交中编写“修复bug”和“新特性”。这是一个文化问题。同意,这是最重要的。是的,你不能强迫用户写有意义的评论,甚至是可以理解的。但是强迫他们写一些东西,而不是只是无脑地发送承诺,对我的经验有很大帮助。对于那些只写“固定”之类的东西的人来说,人与人之间的聊天会有很大的帮助。如果这无济于事,可以考虑在湿式软件中寻找替代品。这对我来说是Ubuntu和UberSVN的作品。虽然我需要将SVNLOOK指向
/opt/ubersvn/bin/SVNLOOK
,但我也必须
sudo chmod 777 pre-commit
才能让它工作;否则,所有提交都将被拒绝。@NamGiVU 777不应轻易使用,如果所有者设置正确,您只需在文件上使用700或750即可工作。谢谢@Shadok。虽然我对
一无所知,但所有者是正确的。如果你能指出,那就太好了more@NamGiVU您应该花一两天的时间阅读linux上的一般文档,因为您似乎缺乏一些基本技能(无意冒犯),在这里可以快速了解有关文件权限和权限的课程:太好了!工作正常,我只需更改python和svnlook的位置。到拒绝小于10个字符的示例钩子脚本的链接已断开。这个答案有点“仅链接”。您不能将钩子示例的内容放入答案中吗?提示:将pre-commit.tmpl重命名为pre-commit
#!/bin/sh

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

SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null

GREP_STATUS=$?
if [ $GREP_STATUS -ne 0 ]
then
    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
fi
exit 0
#!/bin/bash
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
# Comments should have more than 5 characters
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep [a-zA-Z0-9] | wc -c)
if [ "$LOGMSG" -lt 15 ];
then
echo -e "Please provide a meaningful comment when committing changes." 1>&2
exit 1
fi