我正在尝试为我在服务器上设置的存储库创建一个非常简单的提交后挂钩。脚本如下:
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钩子时,它会完美地执行。关于我做错了什么的想法?
答案 0 :(得分:6)
255表示找不到文件,请尝试使用所有文件的绝对路径:
REPOS="$1"
REV="$2"
cd /var/www/directory && /usr/bin/svn update --username user --password pass
运行post commit hook的环境的PATH env变量可能未设置为包含SVN可执行文件所在的任何位置。
答案 1 :(得分:4)
好的,我已经找到了问题。它是路径问题的组合(由chown建议,我将选择其答案)和权限问题。我写了一篇关于这个问题的博客文章(以及一般用SVN设置),可以在http://brennydoogles.wordpress.com
找到答案 2 :(得分:1)
#!/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
。
然后我猛击我的码头工人,手动运行这个钩子,找出' curl'没有安装。
我安装了curl并成功运行了hook,但在提交时仍然是相同的警告。
像这样添加#!/bin/sh
之后:
#!/bin/sh
curl "http://my.redmine.ip/sys/fetch_changesets?id=myproject&key=ETji9KUfs3XxLyyr6cRN"
一切都很好。
答案 3 :(得分:0)
另外,如果svn服务器在apache下运行,并且操作系统在运行SElinux,请记住要授予apache运行脚本的权限,如下所示:
%chcon -t httpd_exec_t / home / svn / repos / hooks / post-commit