我一直坐在这上面约7个小时,而我的年龄接近7岁…啊,服务器pipe理员对我这样做。
我有svn通过apache2与webdav以通常的方式(基本上像http://www.howtoforge.com/setting-up-subversion-with-webdav-post-commit-hook-and-multiple-sites-on-jaunty -jackalope-ubuntu-9.04 )。 ive有无尽的问题(我没有在我以前的Ubuntu服务器安装,虽然这是Ubuntu 10.10):这发生了,并像在post中修复: https : //stackoverflow.com/questions/2547400/how-do-您修复安- svn的-409-冲突错误
这看起来像我的问题,虽然它不是我的解决scheme: 在Ubuntu上的Apache和SVN – 提交后挂钩失败,提前挂钩“权限被拒绝”
我对svn的承诺(最后)。 尽pipe应该在服务器上更新repo的工作副本的提交后挂钩不起作用。
post-commit钩子本身就执行,并且具有sudo权限(就像在上面的设置url中一样)。用whoami >> somelogfile.log或sudo whoami >> somelogfile.log分别显示www-data和root进行testing,尽pipe它不会执行svn update(sudo svn update / var / www / gameServer >> /var/svn/gameServer.log)。 类似于上面的serverfault url,当我执行确切的命令时,它将工作副本更新到最新的版本,而不是通过post-commit钩子。
一个古老的问题是90%的权限问题。 但在纯粹的挫折中,我chmod 777很多的东西,更不用说www-data在/ etc / sudoer这个事实,所以它甚至不需要。
在屏幕前部分崩溃,部分出于挫折,部分出于嗜睡。 任何方向将不胜感激。
从你的钩子脚本中,调用另一个脚本来执行svn更新。 限制万维网数据的sudo能力只是运行该脚本。 不要接受任何参数。
从将做更新的脚本中,确保你拥有本地工作副本的用户是updatin,如下所示:
在sudoers:
www-data ALL=(ALL) NOPASSWD:/usr/local/bin/update_my_thing
Hook脚本被svn调用,并以www-data的forms运行:
#/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'
做一个sudo "cd /local/checkout/copy; svn update"或作为最后的手段,只需将作业添加到cron ,让它运行每5分钟,在大多数情况下,这样的延迟是好的,不会过度劳动的服务器