SVN提交后脚本未执行

时间:2013-10-03 15:47:35

标签: svn svn-hooks post-commit-hook

我现在花了几周时间试图解决这个问题(没有任何进展)。

我遵循了svn红皮书“实施存储库挂钩”部分:

  • 将$ REPOSITORY_HOME / hooks / post-commit.tmpl文件复制到$ REPOSITORY_HOME / hooks / post-commit

  • 使$ REPOSITORY_HOME / hooks / post-commit脚本可由运行httpd或svnserve的帐户执行(事实上,我让所有人都可执行)

  • 验证我的提交后脚本是否可以由命令行上的同一用户手动运行

但是,只要任何用户向存储库提交任何工件,仍然无法执行提交后脚本。

我在svn redbook和post-commit.tmpl中找到的一件事我对它究竟是什么推断有点困惑: “请注意,'post-commit'必须由将调用它的用户(通常用户httpd运行为)执行,并且该用户必须具有访问存储库的文件系统级权限。”

这是否意味着执行提交后脚本的用户也必须是可以访问SVN存储库的用户(通过SVN客户端,例如tortoiseSVN,或者更确切地说是可以通过诸如此类内容访问SVN的存储库文件的本地用户帐户作为腻子)。我相信这可能是我的问题所在,但我并不完全相信,因为运行httpd的用户是post-commit脚本的所有者和存储库所在的文件系统。因此,他拥有文件系统所需的所有权限。但是,我无法使用该用户帐户在我的工作站上使用tortoiseSVN远程检出存储库中的目录/文件。

非常感谢任何见解!

已经审核过的参考文献:

2 个答案:

答案 0 :(得分:1)

我发现你有错误。我假设Post提交失败并显示一条警告消息

post-commit hook failed (exit code 1) with output: 
You need version 1.5.0 or better of the Subversion Python Bindings 

如果是这种情况,我认为您不会在钩子脚本中设置环境变量。出于安全原因,Subversion存储库执行具有空环境的钩子程序 - 即,根本没有设置环境变量,甚至没有设置$ PATH(或Windows下的%PATH%)。因此,许多管理员在他们的钩子程序手动运行时感到困惑,但是在Subversion运行时不起作用。

注意:请务必在钩子程序中明确设置任何必要的环境变量和/或使用程序的绝对路径。

答案 1 :(得分:0)

如果SVN服务器托管在linux上,那么您需要将该文件标记为该用户的可执行文件:

chmod a+x $REPOSITORY_HOME/hooks/post-commit

如果SVN服务器托管在Windows上,那么您可能需要将post-commit文件重命名为post-commit.bat