Я сидел на этом около 7 часов, и я был в возрасте около 7 лет ... ааа, администратор сервера делает это со мной.
у меня 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): это произошло и было исправлено, как в сообщении: https://stackoverflow.com/questions/2547400/how-do-you-fix-an-svn-409-conflict-error
это похоже на мою проблему, хотя это не мое решение: Apache и SVN в Ubuntu - ловушка после фиксации завершается с ошибкой, ловушка перед фиксацией «Permission Denied»
моя фиксация на svn работает (наконец). хотя ловушка post-commit, которая должна svn обновлять рабочую копию репо на сервере, не работает.
сам хук post-commit выполняется и имеет разрешения sudo (как в URL-адресе настройки выше. тестирование с помощью whoami >> somelogfile.log или sudo whoami >> somelogfile.log показывает www-data и root, соответственно), хотя он не выполняется обновление svn (sudo svn update / var / www / gameServer >> /var/svn/gameServer.log). аналогично указанному выше URL-адресу serverfault, когда я выполняю точную команду, он обновляет рабочую копию до последней версии, но не с помощью обработчика post-commit.
извечный вопрос, который в 90% случаев является проблемой с разрешениями. но в чистом разочаровании я chmod 777 много всего, не говоря уже о том, что www-данные находятся в / etc / sudoer, так что это даже не нужно.
Я падаю перед экраном частично из-за разочарования, частично из-за сонливости. любое направление будет оценено.
Из вашего скрипта перехвата вызовите другой скрипт для обновления svn. Ограничьте возможности sudo www-data, просто запустив этот скрипт. Не принимайте никаких аргументов.
В сценарии, который будет выполнять обновление, убедитесь, что вы выполняете 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'
сделать sudo "cd /local/checkout/copy; svn update"
или в крайнем случае просто добавьте вакансию в cron
и пусть он запускается каждые 5 минут, в большинстве случаев такая задержка допустима и не перегружает сервер