svn 提交后未执行

svn 提交后未执行

我已经坐在这里大约 7 个小时了,而我已经老了近 7 岁...啊,服务器管理员对我这样。

我以通常的方式通过 apache2 和 webdav 连接了 svn(基本上就像http://www.howtoforge.com/setting-up-subversion-with-webdav-post-commit-hook-and-multiple-sites-on-jaunty-jackalope-ubuntu-9.04)。我遇到了无数这样的问题(在我之前的 ubuntu 服务器安装中没有遇到过,虽然这是 ubuntu 10.10):发生了这种情况,并已按照帖子中所述进行了修复: https://stackoverflow.com/questions/2547400/how-do-you-fix-an-svn-409-conflict-error

这看起来像我的问题,尽管它不是我的解决方案: Ubuntu 上的 Apache 和 SVN - 提交后挂钩默默失败,提交前挂钩“权限被拒绝”

我对 svn 的提交终于起作用了。尽管应该由 svn 来更新服务器上 repo 的工作副本的提交后钩子却不起作用。

提交后钩子本身会执行,并且具有 sudo 权限(如上面的设置 URL 所示。使用 whoami >> somelogfile.log 或 sudo whoami >> somelogfile.log 进行测试分别显示 www-data 和 root),尽管它不会执行 svn 更新(sudo svn update /var/www/gameServer >> /var/svn/gameServer.log)。与上面的 serverfault url 类似,当我执行确切的命令时,它确实会将工作副本更新为最新版本,只是不通过提交后钩子。

这是一个古老的问题,90% 的时间都是权限问题。但在纯粹的沮丧中,我 chmod 777 了很多东西,更不用说 www-data 在 /etc/sudoer 中,所以它甚至不需要它。

我倒在屏幕前,部分是因为沮丧,部分是因为困倦。如能得到任何指导我将不胜感激。

答案1

从钩子脚本中调用另一个脚本来执行 svn 更新。限制 www-data 的 sudo 能力,只需运行该脚本即可。不接受任何参数。

从执行更新的脚本中,确保您以拥有您正在更新的本地工作副本的用户身份进行 su 操作,如下所示:

在 sudoers 中:

www-data ALL=(ALL) NOPASSWD:/usr/local/bin/update_my_thing

由 svn 调用并作为 www-data 运行的钩子脚本:

#/bin/sh
sudo /usr/local/bin/update_my_thing

然后在 /usr/local/bin/update_my_thing

#/bin/sh
USER=usernam_that_owns_localsvncopy
su $USER -c 'svn up /path/to/localsvncopy'

答案2

或者sudo "cd /local/checkout/copy; svn update"作为最后的手段,只需将作业添加到cron并让其每 5 分钟运行一次,在大多数情况下,这种延迟是可以接受的,不会使服务器超负荷运行

相关内容