10

我正在尝试为我在服务器上设置的存储库创建一个非常简单的提交后挂钩。脚本如下:

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 钩子时,它会完美执行。关于我做错了什么的任何想法?

4

4 回答 4

6

255 表示未找到文件,请尝试使用所有文件的绝对路径:

REPOS="$1"
REV="$2"

cd /var/www/directory && /usr/bin/svn update --username user --password pass

运行后提交挂钩的环境的 PATH 环境变量可能未设置为包含 SVN 可执行文件所在的任何位置。

于 2011-10-20T20:08:20.740 回答
5

好的,我已经弄清楚了这个问题。这是路径问题(如 chown 所建议,我将选择其答案)和权限问题的组合。我已经写了一篇关于这个问题的博客文章(以及通常使用 SVN 进行设置),可以在http://brennydoogles.wordpress.com找到

于 2011-10-28T20:32:31.250 回答
1
  • 不要忘记添加#!/bin/sh你的 post-commit 钩子。#!/bin/env python如果你使用的是 python,请使用
  • 确保权限chmod a+x post-commit
  • 确保钩子中的命令已安装且可访问。

我在 docker(基于 ubuntu)中运行 SVN 并使用 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

然后我 bash 进入我的 docker,手动运行这个钩子,发现没有安装“curl”。

我安装 curl 并成功运行钩子,但提交时仍然出现相同的警告。

像这样添加后#!/bin/sh

#!/bin/sh
curl "http://my.redmine.ip/sys/fetch_changesets?id=myproject&key=ETji9KUfs3XxLyyr6cRN"

一切都很好。

于 2015-12-22T08:47:45.473 回答
1

另外如果 svn 服务器运行在 apache 下,操作系统运行 SElinux,记得给 apache 运行脚本的权限,如:

% chcon -t httpd_exec_t /home/svn/repos/hooks/post-commit

于 2018-09-19T00:35:14.727 回答