如何对 SVN 中的特定文件夹使用预提交挂钩(Windows 批处理文件)?
Posted
技术标签:
【中文标题】如何对 SVN 中的特定文件夹使用预提交挂钩(Windows 批处理文件)?【英文标题】:How to use pre-commit hook(Windows batch file) for a particular folder in SVN? 【发布时间】:2012-03-02 10:51:12 【问题描述】:我想在 SVN(即 Windows 的 .bat 文件)中创建一个预提交挂钩来检查空日志消息。此外,我只想针对 SVN 中的特定文件夹进行此检查。
有人可以帮忙吗?
问候, 鲁希·贾斯瓦尔
【问题讨论】:
Windows Pre-commit hook for comment length Subversion 的可能重复项 @NikolaSmiljanić:不要认为这是重复的,因为 OP 只想为特定文件夹执行钩子(即检查空 cmets)... 【参考方案1】:如果您在 Windows 上并使用 TortoiseSVN,我建议为此使用 svn 属性。
tsvn:logminsize 设置提交的日志消息的最小长度。 如果您输入的消息比此处指定的短,则提交为 禁用。此功能对于提醒您提供一个非常有用的 每次提交的正确描述性消息。如果这个属性不是 设置,或者值为零,则允许空日志消息。
还请务必查看 other features 之类的错误跟踪器集成。
如果您真的想使用钩子在服务器端执行此操作,您可以尝试this,在这种情况下您的问题是重复的 :)
【讨论】:
【参考方案2】:如果您对TortoiseSVN 没问题,您可以在此处输入client-side hook。
TortoiseSVN 将以下参数传递给预提交挂钩:
路径深度消息文件 CWD
有趣的是PATH
:
路径 包含启动操作的所有路径的临时文件的路径。每个路径在临时文件中单独一行。
所以,当你的钩子被调用时(顺便说一句,可以是任何语言),请执行以下步骤:
-
检查
MESSAGEFILE
的内容。如果里面有注释,一切正常,从脚本中返回成功(我不记得成功是用0还是!0表示的,试一试)
如果MESSAGEFILE
为空,请浏览文件PATH
并查看其中是否有受影响的元素。如果是,则返回错误;否则返回成功。
【讨论】:
【参考方案3】:-
你不能有钩子,它只适用于某些子树的事件
挂钩是存储库范围内事件的处理程序
如果您只想检查受影响的 repo 的某些部分,您必须在钩子代码中添加逻辑
【讨论】:
【参考方案4】:除了Windows Pre-commit hook for comment length Subversion 这个答案之外,您还可以使用svnlook dir-changed
来检查当前提交的特定目录。
所以你可以添加类似的东西
svnlook dir-changed %REPOS% -t %TXN% | findstr your_path > nul
if %errorlevel% equ 0 exit 0
svnlook log %REPOS% -t %TXN% | findstr . > nul
if %errorlevel% gtr 0 (goto err) else exit 0
【讨论】:
以上是关于如何对 SVN 中的特定文件夹使用预提交挂钩(Windows 批处理文件)?的主要内容,如果未能解决你的问题,请参考以下文章