我们的 Web 应用程序有一个暂存版本(它基本上是一个没有人工作的颠覆工作副本),它位于“/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}
而已。日志文件具有与提交后脚本相同的权限和用户:组,我什至为暂存副本提供了相同的用户:组和权限。Apache 本身(我们使用的是 apache subversion 扩展)也在 apache:dev 下运行。我知道钩子正在执行,因为上面注释掉的发送电子邮件的东西工作正常 - 只是更新命令不是。
我还可以使用以下方法在没有环境变量的情况下执行提交后挂钩脚本:
$ env - /svn/software/hooks/post-commit /svn/software <changeset>
它运行良好,执行“svn update”没有问题。我什至尝试将“>>”删除到日志文件,但这并没有什么不同。
对此的任何帮助将不胜感激......