如何对 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 批处理文件)?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 SVN 提交消息模板和挂钩以验证

SVN 的 CPP 检查预提交挂钩

SVN - 在开始提交挂钩中获取提交大小?

如何强制将审阅者姓名输入到 SVN 提交评论中

IntelliJ IDEA 中的预提交挂钩

Git 预提交挂钩:更改/添加的文件