У нас есть промежуточная версия нашего веб-приложения (по сути, это рабочая копия подрывной деятельности, над которой никто не работает), которая находится в '/ 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="[email protected]"
# 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. Я даже попытался удалить ">>" из файла журнала, но это не имеет значения.
Любая помощь по этому поводу будет очень признательна ...