我现在花了几周时间试图解决这个问题(没有任何进展)。
我遵循了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远程检出存储库中的目录/文件。
非常感谢任何见解!
已经审核过的参考文献:
答案 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