服务器端钩子脚本

钩子脚本是由某些版本库事件触发的程序,例如创建新版本或修改未被版本控制的属性。每个钩子都能掌管足够的信息来了解发生了什么事件,操作对象是谁以及触发事件用户名。根据钩子的输出或者返回状态,钩子程序能够以某种方式继续执行,停止或者挂起。请参阅 Subversion 手册中的 钩子脚本 章节来获得关于已实现的钩子的完整信息。

这些钩子脚本被版本库所在的服务器执行。TortoiseSVN 也允许你配置由确定事件触发,在本地执行的客户端脚本。请参看 “客户端钩子脚本”一节 以获得更多信息。

钩子脚本的例子位于版本库的 hooks 目录下。这些示例版本适用于 Unix/Linux 服务器,需要修改后才能用于Windows 的服务器。钩子可以是批处理文件或者可执行文件。下面的例子是用于版本属性更改之前 (pre-revprop-change) 的钩子。

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 来实现。

跨越钩子

如果一个钩子脚本拒绝你的提交,那这就是它的最终决定。但是你可以在脚本中使用 魔咒 来构建一种跨越机制。如果脚本要拒接操作,它首先在日志信息中扫描某个特定的通关短语,可以是一个固定的短语或者带有某个前缀的文件名。如果它找到了魔咒则允许提交继续进行。如果没有找到则阻挡提交并返回一条消息,例如 你没有念魔咒。 :-)