我不知道这种情况是什么时候发生的,但出于某种原因,我的 Subversion 钩子都不再运行了。我在 Gentoo Linux 机器上运行 Subversion 1.6.9,它的钩子以前可以正常工作。我通过 Apache2.2 的 svn_dav 模块运行 Subversion。
我修改了我使用的钩子脚本,每次执行时都会将其写入 apache:apache 拥有的 /tmp 目录中的文件中,但提交后,文件中没有任何内容需要写入。这些脚本是可执行文件,归 apache:apache 所有,因此我认为这不是问题所在。
这是我的未执行的测试脚本之一(post-commit.sh):
#!/bin/sh
/bin/echo post-commit >> /tmp/z_test
exit 0
运行提交后,我希望 pre-commit.sh 和 post-commit.sh 挂钩都能运行,但它们似乎都没有写入所需的文件(/tmp/z_test)。
这是怎么回事?
答案1
由于某种原因,Subversion 似乎不再接受钩子脚本上的任意扩展。我确实有名为“post-commit.sh”的钩子,但 Subversion 似乎不再寻找这些。将钩子脚本重命名为“post-commit”后,Subversion 立即运行它。
我不确定 Subversion 的哪个修订版本改变了这种行为,并且 1.6.11 的 CHANGES 文件中没有提到它。
答案2
以下是需要检查的几个基本调试步骤:
仔细检查 Apache 进程所运行的用户,以确保其有权执行挂钩脚本并写入 /tmp 目录:
ps -ef | grep httpd
确保您可以在以 apache 用户身份登录时从命令行执行钩子脚本 - 大多数时候我遇到 SVN 钩子问题,这些脚本要么没有正确的执行权限,要么包含从命令行执行时变得明显的拼写错误。
如果这没有帮助,这里有一个很好的一步一步指导如何调试钩子脚本。
答案3
不确定它是否有帮助,但我在 StackOverflow 上找到了这个。
答案4
从 tmpl 复制并将 exec 添加到 post-commit
cp post-commit.tmpl post-commit
chmod +x post-commit