手册

服务器端 hook 脚本

Hook 脚本是由版本库事件触发的程序,例如创建新版本或修改未版本控制的属性。每个 hook 都会获得足够的信息来告知事件类型、操作的目标以及触发事件的用户的用户名。根据 hook 的输出或返回状态,hook 程序可以继续操作、停止操作或以某种方式暂停操作。有关已实现的 hook 的完整详细信息,请参阅 Subversion Book 中关于 Hook Scripts 的章节。

这些 hook 脚本由托管版本库的服务器执行。TortoiseSVN 还允许您配置客户端 hook 脚本,这些脚本在某些事件发生时在本地执行。有关更多信息,请参阅名为“客户端 Hook 脚本”的章节。

示例 hook 脚本可以在版本库的 hooks 目录中找到。这些示例脚本适用于 Unix/Linux 服务器,但如果您的服务器是基于 Windows 的,则需要进行修改。hook 可以是批处理文件或可执行文件。下面的示例展示了一个批处理文件,该文件可能用于实现 pre-revprop-change hook。

rem Only allow log messages to be changed.
if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1
    

请注意,发送到 stdout 的任何内容都将被丢弃。如果您希望消息出现在“提交拒绝”对话框中,则必须将其发送到 stderr。在批处理文件中,这可以使用 >&2 来实现。

覆盖 Hook

如果 hook 脚本拒绝您的提交,则其决定是最终的。但是,您可以使用 Magic Word 技术在脚本本身中构建覆盖机制。如果脚本想要拒绝操作,它首先扫描日志消息中是否存在特殊的密码短语,可以是固定的短语,也可以是带有前缀的文件名。如果找到 magic word,则允许提交继续进行。如果未找到该短语,则可以使用类似 你没有说 magic word 的消息阻止提交。:-)

TortoiseSVN 主页