我们的网络应用程序的暂存版本(它基本上是一个没有人工作的颠覆工作副本)存在于'/ apps / software'中。每个开发人员都在'〜/ apps / software'中拥有自己的工作副本。每当开发人员向存储库提交更改时,我都希望使用一个简单的提交后挂钩脚本来更新登台副本。
听起来很简单吧?好吧,我一直在撞墙上的砖头比我应该的时间更长。钩子脚本(称为“post-commit”,位于/ svn / software / hooks,permissions = 777,user:group = 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}
就是这样。日志文件具有相同的权限,user:group作为post-commit脚本,我甚至为登台副本提供了相同的用户:组和权限。 Apache本身(我们正在使用apache subversion扩展)也在apache:dev下运行。我知道钩子正在被执行,因为在发送电子邮件之前注释掉的东西工作正常 - 这只是更新命令不是。
我还可以使用:
执行不带环境变量的post-commit钩子脚本$ env - /svn/software/hooks/post-commit /svn/software <changeset>
它运行正常,执行'svn update'没问题。我甚至尝试删除'&gt;&gt;'记录文件,但它没有什么区别。
对此的任何帮助都将非常感激......
答案 0 :(得分: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