【问题标题】:SVN post-commit script not being executedSVN 提交后脚本未执行
【发布时间】:2013-10-03 15:47:35
【问题描述】:

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

我遵循了 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 存储库的用户(通过 SVN 客户端,例如 tortoiseSVN,或者更确切地说是可以通过诸如此类的方式访问 SVN 存储库文件的本地用户帐户)作为腻子)。我相信这可能是我的问题所在,但我并不完全相信,因为运行 httpd 的用户是提交后脚本和存储库所在文件系统的所有者。因此,他拥有文件系统所需的所有权限。但是,我无法使用该用户帐户在我的工作站上使用 tortoiseSVN 从存储库中远程签出目录/文件。

非常感谢任何见解!

已审核的参考资料:

【问题讨论】:

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


    【解决方案1】:

    我看到你有一个错误。我假设 Post commit 失败并显示一条警告消息

    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 下)也没有设置。正因为如此,当他们的 hook 程序手动运行良好,但被 Subversion 运行时,许多管理员感到困惑。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        相关资源
        最近更新 更多