linux - svn:E165001:提交被预提交 Hook (退出代码 255)阻止,没有输出。如何解决?

标签 linux bash svn phabricator

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

svn: E165001: Commit blocked by pre-commit hook (exit code 255) with no output.

需要说明的是,有问题的错误信息是由 svn 客户端程序输出的。好像是svnserve在遇到各种问题时发出的,比如因为某些原因无法运行hook。它不必由钩子(Hook)提供。

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

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

#!/bin/sh

echo "testing" >&2
exit 1

我在使用这个钩子(Hook)时也收到同样的错误消息。在这种情况下,在这个脚本可以工作之前,尝试解决更复杂的脚本没有多大意义。很可能通过解决此脚本,原始脚本也能正常工作。我一直在测试这个脚本,我在这个问题中发布的所有内容都适用于这个脚本。 基本上,在这个时间点,我提供的脚本确实是我正在尝试制作的脚本。

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

以下是我认为可能有助于解决此问题的一些信息,这些信息基于我目前看到的有关此错误消息的文章:

  • 存储库由运行 svnserve 的用户 phd 所有。
  • 预提交 Hook 设置为可执行。
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
  • SELinux 被禁用/设置为宽松:
foven@phabricator:~$ sudo getenforce
Disabled
  • 我已经在预提交 Hook 文件上运行了 dos2unix:
foven@phabricator:~$ sudo dos2unix /var/repo/SVN/hooks/pre-commit
dos2unix: converting file /var/repo/SVN/hooks/pre-commit to Unix format...
  • 我可以以用户 phd 的身份从命令行运行 Hook 脚本:
[phd@phabricator ~]$ /var/repo/SVN/hooks/pre-commit
testing

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

[phd@phabricator ~]$ env -i /var/repo/SVN/hooks/pre-commit
testing
  • 看起来脚本的 shebang 是正确的:
[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
  • 如果钩子(Hook)被删除,我可以提交代码。
  • 我可以结帐代码。

更新

根据#svn IRC channel 中的讨论,我尝试了以下方法:

sudo svn mkdir file:///var/repo/SVN/TestFolder -m "Add test folder"

svn: E165001: Commit blocked by pre-commit hook (exit code 1) with output:
testing

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

最佳答案

我在Centos6.5上部署了svn服务器,在Win7上使用客户端TortoiseSVN1.8.10。第一次添加pre-commit hook脚本时,提交时客户端弹出消息“Commit blocked by pre-commit hook (exit code 255) with no output”。我刚刚通过以下操作解决了我的问题:

$ cd /data/svn/hooks/

$ chmod +x ./pre-commit

关于linux - svn:E165001:提交被预提交 Hook (退出代码 255)阻止,没有输出。如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33789148/

相关文章:

python - 指定与 sudo apt-get 一起使用的 python 实例

bash - 如何grep文件中不区分大小写的字符串?

bash - 在不使用 stderr 的情况下将 stdout 重定向到文件后写入终端?

git - Git SVN 克隆错误

linux - 如何用同一文本行中的尾随字符替换字符匹配项?

linux - 当用户主目录安装在 NFS 卷上时 Ansible 不起作用

linux - 如何使用字符串作为文件名输入来执行 imagemagick - 在 bash 中

git 相当于 svnlook 的改变

svn - 进行持续集成时的最佳分支策略?

c# - 从 C# 和 Mono 启动进程时内存不足