当前位置:  开发笔记 > 开发工具 > 正文

如何在VisualSVN服务器中要求提交消息?

如何解决《如何在VisualSVN服务器中要求提交消息?》经验,为你挑选了4个好方法。

我们在Windows上将VisualSVN Server设置为我们的Subversion服务器,我们在工作站上使用Ankhsvn + TortoiseSVN作为客户端.

如何配置服务器以要求提交消息为非空?



1> sylvanaar..:

我很高兴你问这个问题.这是我们在常见Windows Batch中编写的预提交钩子脚本.如果日志消息少于6个字符,则拒绝提交.只需将pre-commit.bat放入hooks目录即可.

预commit.bat

setlocal enabledelayedexpansion

set REPOS=%1
set TXN=%2

set SVNLOOK="%VISUALSVN_SERVER%\bin\svnlook.exe"

SET M=

REM Concatenate all the lines in the commit message
FOR /F "usebackq delims==" %%g IN (`%SVNLOOK% log -t %TXN% %REPOS%`) DO SET M=!M!%%g

REM Make sure M is defined
SET M=0%M%

REM Here the 6 is the length we require
IF NOT "%M:~6,1%"=="" goto NORMAL_EXIT

:ERROR_TOO_SHORT
echo "Commit note must be at least 6 letters" >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1

REM All checks passed, so allow the commit.
:NORMAL_EXIT
exit 0


使用环境变量VISUALSVN_SERVER来发现svnlook的位置是很好的.即:设置SVNLOOK ="%VISUALSVN_SERVER%\ bin\svnlook.exe"
@sylvanaar我们一直在使用这个钩子(非常感谢!)但是在升级到VisualSVN Server 2.5并升级我们的存储库之后它就停止了工作.使用输出阻止前提交挂钩(退出代码1)的提交:svnlook:E205000:尝试'svnlook help'获取更多信息svnlook:E205000:给出的参数太多任何想法?我认为这与svnlook路径中的空格有关,但无法解决它.
我有一点改进,这在64位版本的Windows 2008中是有用的:而不是使用"C:\ Program Files\Vis ..."使用Windows环境变量,如"%PROGRAMFILES%\ Vis ...."

2> Jason Jackso..:

VisualSVN Server 3.9提供VisualSVNServerHooks.exe check-logmessage预提交挂钩,可帮助您拒绝提交空或短日志消息的提交.有关说明,请参阅文章KB140:验证VisualSVN Server中的提交日志消息.

除了内置的VisualSVNServerHooks.exe,VisualSVN Server和SVN通常使用许多钩子来完成这样的任务.

start-commit - 在提交事务开始之前运行,可用于执行特殊权限检查

pre-commit - 在事务结束时运行,但在提交之前运行.通常用于验证诸如非零长度日志消息之类的内容.

post-commit - 在提交事务后运行.可用于发送电子邮件或备份存储库.

pre-revprop-change - 在修订属性更改之前运行.可用于检查权限.

post-revprop-change - 在修订版属性更改后运行.可用于通过电子邮件发送或备份这些更改.

你需要使用pre-commit钩子.您可以使用您的平台支持的任何语言自己编写,但Web上有许多脚本.谷歌搜索"svn precommit挂钩要求评论"我发现一对看起来像他们适合该法案:

Perl脚本

Python脚本


在预提交注释中需要x个字符的代码是什么?
@coffeeaddict,我不明白你的意思.你的意思是你不知道如何编写脚本,或者你不知道该把它放在哪里,或者是什么?我只是用谷歌搜索"pre-commit svn require comment"(http://www.google.com/search?q=pre-commit+svn+require+comment)并找到各种脚本.这是挂钩的SVN书籍条目:http://svnbook.red-bean.com/en/1.4/svn.ref.reposhooks.pre-commit.html.这是SVN书的另一部分,涉及安装钩子:http://svnbook.red-bean.com/en/1.4/svn.reposadmin.create.html

3> Olaf Kock..:

已经给出了您的问题的技术答案.我想添加社交答案,即:"通过与您的团队建立提交消息标准并让他们同意(或接受)为什么需要表达性提交消息的原因"

我看过很多提交消息,上面写着"补丁","拼写错误","修复"或类似错误.

真的 - 让每个人都清楚你为什么需要它们.

原因的例子是:

生成的Changenotes(嗯 - 这实际上是一个很好的自动工具来强制执行好消息,如果我知道他们将(以我的名字)公开可见 - 如果只是为了团队)

许可证问题:您可能需要稍后知道代码的来源,例如,您是否希望将许可证更改为您的代码(有些组织甚至有提交邮件格式的标准 - 好吧,您可以自动检查这个,但是你会不一定得到好的提交消息与此)

与其他工具的互操作性,例如与您的版本控制接口并从提交消息中提取信息的bugtrackers /问题管理系统.

希望有帮助,除了关于precommit钩子的技术答案.


我曾经为一个组织工作,甚至在没有可接受的提交消息的情况下系统地回滚提交,特别是在发布接近时.

4> bahrep..:

这是一个两部分示例Batch + PowerShell预提交挂钩,它拒绝提交少于25个字符的日志消息.

把两者pre-commit.batpre-commit.ps1为您的存储库hooks文件夹,如C:\Repositories\repository\hooks\

预commit.ps1

# Store hook arguments into variables with mnemonic names
$repos    = $args[0]
$txn      = $args[1]

# Build path to svnlook.exe
$svnlook = "$env:VISUALSVN_SERVER\bin\svnlook.exe"

# Get the commit log message
$log = (&"$svnlook" log -t $txn $repos)

# Check the log message contains non-empty string
$datalines = ($log | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
  # Log message is empty. Show the error.
  [Console]::Error.WriteLine("Commit with empty log message is prohibited.")
  exit 3
}

exit 0

预commit.bat

@echo off
set PWSH=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
%PWSH% -command $input ^| %1\hooks\pre-commit.ps1 %1 %2
if errorlevel 1 exit %errorlevel%

注1:pre-commit.bat是唯一可以被VisualSVN调用的,然后pre-commit.ps1是被调用的那个pre-commit.bat.

注2:pre-commit.bat也可以命名pre-commit.cmd.

注3:如果您尝试编码问题与一些重音符号的字符和[Console]::Error.WriteLine输出,再加入例如chcp 1252pre-commit.bat后,下一行@echo off.


由于某种原因,`$ dataline`变成了一个字符串数组,而不是一行.所以我把那行换成了'$ datalines =($ log | where {$ _.trim()-ne""})-join"``n"`
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有