svn:E165001:提交被预提交挂钩(退出代码 255)阻止,没有输出。如何解决这个问题?

fov*_*ven 5 linux svn bash phabricator

我正在尝试使用 Phabricator 配置 svn。到目前为止,除了提交更改之外,一切似乎都正常。当我尝试提交任何代码时,我收到以下错误消息:

svn: E165001: Commit blocked by pre-commit hook (exit code 255) with no output.
Run Code Online (Sandbox Code Playgroud)

需要明确的是,有问题的错误消息是由 svn 客户端程序输出的。它似乎是在遇到各种问题时从 svnserve 发送的,例如由于某种原因无法运行钩子。它不必由钩子提供。

如果我删除预提交挂钩,提交将按预期进行。

出于测试目的,我创建了一个非常简单的钩子,如下所示:

#!/bin/sh

echo "testing" >&2
exit 1
Run Code Online (Sandbox Code Playgroud)

使用此挂钩时我也收到相同的错误消息。 在这种情况下,在这个脚本能够工作之前,尝试解决更复杂的脚本没有多大意义。很可能通过解决这个脚本,原来的脚本也能工作。我一直在使用这个脚本进行测试,我在这个问题中发布的所有内容都适用于这个脚本。 基本上,在这个时间点上,我所呈现的脚本确实是我正在尝试使其工作的脚本。

我已经禁用了 Phabricator 守护进程,否则预提交脚本会被 Phabricator 覆盖。

根据迄今为止我所看到的有关此错误消息的内容,以下是我认为可能有助于解决此问题的一些信息:

  • 该存储库由运行 svnserve 的用户 phd 所有。
  • 预提交挂钩设置为可执行。
#!/bin/sh

echo "testing" >&2
exit 1
Run Code Online (Sandbox Code Playgroud)
  • SELinux 已禁用/设置为宽松:
foven@phabricator:~$ sudo ls -la /var/repo/SVN/hooks/
total 60
drwxr-xr-x. 3 phd  phd   4096 Nov 18 13:46 .
drwxr-xr-x. 6 phd  phd   4096 Nov 18 11:27 ..
-rwxr-xr-x. 1 phd  phd   2062 Oct 27 10:17 post-commit.tmpl
-rwxr-xr-x. 1 phd  phd   1638 Oct 27 10:17 post-lock.tmpl
-rwxr-xr-x. 1 phd  phd   2289 Oct 27 10:17 post-revprop-change.tmpl
-rwxr-xr-x. 1 phd  phd   1567 Oct 27 10:17 post-unlock.tmpl
-rwxr-xr-x  1 phd  phd     37 Nov 18 14:39 pre-commit
drwxr-xr-x. 2 phd  phd     19 Nov 17 17:05 pre-commit-phabricator.d
-rwxr-xr-x. 1 phd  phd   3426 Nov 12 15:59 pre-commit.tmpl
-rwxr-xr-x. 1 phd  phd   2434 Oct 27 10:17 pre-lock.tmpl
-rwxr-xr-x. 1 phd  phd   2786 Oct 27 10:17 pre-revprop-change.tmpl
-rwxr-xr-x. 1 phd  phd   2122 Oct 27 10:17 pre-unlock.tmpl
-rwxr-xr-x. 1 phd  phd   3163 Oct 27 10:17 start-commit.tmpl
Run Code Online (Sandbox Code Playgroud)
  • 我已在预提交挂钩文件上运行 dos2unix:
foven@phabricator:~$ sudo getenforce
Disabled
Run Code Online (Sandbox Code Playgroud)
  • 我可以以用户 phd 的身份从命令行运行钩子脚本:
foven@phabricator:~$ sudo dos2unix /var/repo/SVN/hooks/pre-commit
dos2unix: converting file /var/repo/SVN/hooks/pre-commit to Unix format...
Run Code Online (Sandbox Code Playgroud)

即使环境是空的,这显然与 svn hooks 的运行方式相匹配。

[phd@phabricator ~]$ /var/repo/SVN/hooks/pre-commit
testing
Run Code Online (Sandbox Code Playgroud)
  • 看来脚本的 shebang 是正确的:
[phd@phabricator ~]$ env -i /var/repo/SVN/hooks/pre-commit
testing
Run Code Online (Sandbox Code Playgroud)
  • 如果删除钩子我可以提交代码。
  • 我可以检查代码。

更新

根据 #svn IRC 频道中的讨论,我尝试了以下操作:

[phd@phabricator ~]$ which sh
/bin/sh
[phd@phabricator ~]$ ls -la /bin/sh
lrwxrwxrwx. 1 root root 4 Aug 18 09:37 /bin/sh -> bash
[phd@phabricator ~]$ which bash
/bin/bash
Run Code Online (Sandbox Code Playgroud)

所以这意味着钩子可以工作并且可能根本没有故障。仍然不确定问题是什么,所以不能完全排除钩子(可能钩子大部分都很好,但需要更改一些东西才能使用此配置)。但问题似乎可能出在其他地方。欢迎任何帮助。

小智 -2

以下是我的错误信息:

aaaa@zgg:~/www/eval/webroot$ svn ci -m '' index.php
正在发送index.php
正在传输文件数据 .done
正在提交事务...
svn: E165001: 提交失败(详情如下):
svn: E165001:提交被预提交挂钩阻止(退出代码 255),输出:
************************************ **************************************
* 请在提交这些更改之前更正以下错误!*********************************************************
​**********************

我如何解决问题:

我刚刚在我想要提交的文件(index.php)中发现了一些语法错误,修复语法错误后我可以成功提交。

检查您的提交文件中是否有任何错误。祝你好运!