我正在尝试为我在服务器上设置的存储库创建一个非常简单的提交后挂钩。脚本如下:
REPOS="$1"
REV="$2"
cd /var/www/directory && svn update --username user --password pass
当我从我的SVN客户端运行提交时,我收到以下错误:
post-commit hook failed (exit code 255) with no output.
但是,当我使用sudo bash post-commit从cli运行我的post-commit钩子时,它会完美地执行。关于我做错了什么的任何想法?
255表示找不到文件,尝试使用所有文件的绝对路径:
REPOS="$1"
REV="$2"
cd /var/www/directory && /usr/bin/svn update --username user --password pass
运行post commit hook的环境的PATH env变量可能未设置为包含SVN可执行文件所在的任何位置。
好的,我已经找到了问题。它是路径问题的组合(由chown建议,我将选择其答案)和权限问题。我写了一篇关于这个问题的博客文章(以及一般用SVN设置),可以在http://brennydoogles.wordpress.com找到
#!/bin/sh
。如果你使用的是python,请使用#!/bin/env python
chmod a+x post-commit
我在docker中运行SVN(基于ubuntu)并使用post-commit钩子来实现我的Redmine同步时遇到这个问题:
curl "http://my.redmine.ip/sys/fetch_changesets?id=myproject&key=ETji9KUfs3XxLyyr6cRN"
我得到了错误Warning: post-commit hook failed (exit code 255) with no output
。
然后我猛击我的docker,手动运行这个钩子,发现没有安装'curl'。
我安装curl并成功运行hook,但提交时仍然是相同的警告。
添加#!/bin/sh
后像这样:
#!/bin/sh
curl "http://my.redmine.ip/sys/fetch_changesets?id=myproject&key=ETji9KUfs3XxLyyr6cRN"
一切都好。
此外,如果svn服务器在apache下运行,并且操作系统正在运行SElinux,请记住授予apache运行脚本的权限,如下所示:
%chcon -t httpd_exec_t / home / svn / repos / hooks / post-commit