Svn 预提交钩子没有被执行
Svn pre-commit hook not getting executed
我有一个 Centos 7 虚拟机(VirtualBox 来宾)作为我的 svn 服务器,已经配置了 svn -- mod_dav_svn 并且一切正常:可以签出并提交。问题是当添加预提交挂钩然后尝试从 windows 机器(VirtualBox 主机)提交时,TortoiseSVN 失败并出现此错误
提交被预提交挂钩阻止(退出代码 255),没有输出。
从我得到的 httpd 日志中
[客户端 xx.xx.xx.xxx:57] 无法将资源“/svn/testrepo/!svn/txn/5-2f”合并到“/svn/testrepo/trunk”中。 [500, #0]
所有权限都设置正确,我什至尝试了 777,但它不起作用,除非我删除钩子。
这是我在设置时遵循的参考:
http://www.unixmen.com/install-subversion-centos-7/
我想知道我的 10-subversion.conf 文件中是否缺少某些内容...
我正在使用默认的预提交,它已经被设置为可执行文件并且所有者是 apache 用户。我做的另一个测试是删除预提交脚本中的所有代码,只留下 "exit 0" 指令。
这是我的 10-subversion.conf 文件的样子:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so
<Location /svn>
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile /etc/svn-auth-users
Require valid-user
</Location>
CustomLog logs/svn_logfile "%t %u %{SVN-ACTION}e" env=SVN-ACTION
你能post你的预提交脚本吗?
如果没有,请将以下内容添加到您的“.sh”脚本中。
set -xv
在
之后的行
#!/bin/bash
终于看到了:
#!/bin/bash
set -xv
如果这不能为您提供更多日志记录,请将输出重定向到脚本中的文件。这样你就可以调试你的脚本了。
您还可以增加 apache 中的日志记录。检查这个
http://svnbook.red-bean.com/en/1.6/svn.serverconfig.httpd.html#svn.serverconfig.httpd.extra.logging
所以SVN只有一个文件,日志级别也可以玩
我个人会先尝试,因为脚本的更改更容易。
(下一个问题,请更具体)
终于找到解决办法了。根本原因是 SELinux 不允许预提交脚本通过 httpd 服务执行。我通过 运行 这一行
摆脱了它
chcon -t httpd_exec_t pre-commit
谢谢大家!我希望这对其他人有帮助。
我有一个 Centos 7 虚拟机(VirtualBox 来宾)作为我的 svn 服务器,已经配置了 svn -- mod_dav_svn 并且一切正常:可以签出并提交。问题是当添加预提交挂钩然后尝试从 windows 机器(VirtualBox 主机)提交时,TortoiseSVN 失败并出现此错误
提交被预提交挂钩阻止(退出代码 255),没有输出。
从我得到的 httpd 日志中
[客户端 xx.xx.xx.xxx:57] 无法将资源“/svn/testrepo/!svn/txn/5-2f”合并到“/svn/testrepo/trunk”中。 [500, #0]
所有权限都设置正确,我什至尝试了 777,但它不起作用,除非我删除钩子。
这是我在设置时遵循的参考: http://www.unixmen.com/install-subversion-centos-7/
我想知道我的 10-subversion.conf 文件中是否缺少某些内容...
我正在使用默认的预提交,它已经被设置为可执行文件并且所有者是 apache 用户。我做的另一个测试是删除预提交脚本中的所有代码,只留下 "exit 0" 指令。
这是我的 10-subversion.conf 文件的样子:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so
<Location /svn>
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile /etc/svn-auth-users
Require valid-user
</Location>
CustomLog logs/svn_logfile "%t %u %{SVN-ACTION}e" env=SVN-ACTION
你能post你的预提交脚本吗? 如果没有,请将以下内容添加到您的“.sh”脚本中。
set -xv
在
之后的行#!/bin/bash
终于看到了:
#!/bin/bash
set -xv
如果这不能为您提供更多日志记录,请将输出重定向到脚本中的文件。这样你就可以调试你的脚本了。
您还可以增加 apache 中的日志记录。检查这个 http://svnbook.red-bean.com/en/1.6/svn.serverconfig.httpd.html#svn.serverconfig.httpd.extra.logging
所以SVN只有一个文件,日志级别也可以玩
我个人会先尝试,因为脚本的更改更容易。
(下一个问题,请更具体)
终于找到解决办法了。根本原因是 SELinux 不允许预提交脚本通过 httpd 服务执行。我通过 运行 这一行
摆脱了它chcon -t httpd_exec_t pre-commit
谢谢大家!我希望这对其他人有帮助。