Subversion提交后钩子无法更新“staging”版本

4
我们有一个网页应用程序的临时版本(基本上是没有人使用的svn工作副本),位于“/apps/software”文件夹下。每个开发者都有自己的工作副本,位于“~/apps/software”文件夹下。我想利用一个简单的提交后钩子脚本,在开发者提交修改到代码库时,更新临时版本。
听起来很简单对吧?但我已经在这个问题上纠结了比我应该花的时间更长。钩子脚本(名为“post-commit”,位于/svn/software/hooks文件夹下,权限=777,用户:组=apache:dev)如下所示(现在先忽略注释掉的部分):
#!/bin/sh

/usr/bin/svn update /apps/software >> /var/log/svn/software.log

# REPOS="$1"
# REV="$2"
# AUTHOR=`/usr/bin/svnlook author -r "$REV" "$REPOS"`
# LOG=`/usr/bin/svnlook log -r "$REV" "$REPOS"`
# EMAIL="test@example.com"

# echo "Commit log message as follows:-
#
# \"${LOG}\"
#
# The staging version has automatically been updated.
#
# See http://trac/projects/software/changeset/${REV} for more details." | /bin/mail -s "SVN : software : revision ${REV} committed by ${AUTHOR}" ${EMAIL}

就是这样。日志文件具有与提交后脚本相同的权限和用户组,并且我甚至已经将暂存副本赋予了相同的用户组和权限。Apache本身(我们使用的是apache子版本控制扩展)也在apache:dev下运行。我知道钩子正在执行,因为上面被注释掉的发送电子邮件的内容正常工作 - 只有更新命令没有。

我还可以使用以下方法执行不带环境变量的提交后挂钩脚本:

$ env - /svn/software/hooks/post-commit /svn/software <changeset>

它运行得很好,执行“svn update”没有问题。我甚至尝试删除“>>”到日志文件的内容,但是这没有任何区别。

如果您能提供帮助,将不胜感激...


不是说这与你的问题有任何关系,但你的shebang写的是“sh”,而你的问题标签却写的是“bash”。 - Dennis Williamson
好的,我已经选择了更广泛的“shell”标签。 - user159895
1个回答

3

在这里,你只是将标准输出发送到日志中,而不是错误输出:

/usr/bin/svn update /apps/software >> /var/log/svn/software.log

这样做可以查看出错的原因:

/usr/bin/svn update /apps/software >> /var/log/svn/software.log 2>&1

那帮了我很多——谢谢你!日志文件详细说明了我的问题:验证服务器证书时出现错误: - 该证书未经受信任的颁发机构签署。请使用指纹手动验证证书! (R) 拒绝,(t) 暂时接受或(p) 永久接受?svn:对“/live”的 PROPFIND 请求失败 svn:PROPFIND "/live":服务器证书验证失败:签发者不受信任(所以基本上,我们正在使用自签名 SSL,我需要一些方法来永久接受它。有什么想法吗? - user159895
啊,这在 SVN 书籍中有详细介绍:http://svnbook.red-bean.com/en/1.5/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authn.sslcerts - Wim Coenen
提醒:所提到的 servers 文件可以在 ~/.subversion/ 目录下找到,并且在此处有详细描述:http://svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html#svn.advanced.confarea.opts.servers - Wim Coenen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接