3

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

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

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

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

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

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

我在 svn 红皮书和 post-commit.tmpl 中发现的一件事让我对它的推断有点困惑:“请注意,‘post-commit’必须由将调用的用户执行它(通常以用户 httpd 的身份运行),并且该用户必须具有文件系统级别的权限才能访问存储库。”

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

非常感谢任何见解!

已审阅的参考资料:

4

2 回答 2

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(或 %PATH%,在 Windows 下)。正因为如此,当他们的钩子程序手动运行良好时,许多管理员感到困惑,但在 Subversion 运行时却无法运行。

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

于 2013-10-04T13:16:13.573 回答
0

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

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

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

于 2013-10-03T15:54:36.127 回答