Subversion. Автоматическое обновление проекта при помощи хуков
В большинстве случаев, при разработке веб-проекта требуется автоматически обновлять рабочую версию, на помощь на приходят свн-хуки!
Начнем с того, что у нас есть веб-проект и нам необходимо создать для него репозиторий, как это сделать я рассказывал в статье "FreeBSD. Установка и настройка Subversion".
Далее, мы будем обновлять наш проект только через репозиторий!
Подготовка проекта
Сначала сделаем импорт веб-проекта в репозиторий:
# svn import /_project_ file:///svn/repos/_project_
Теперь удалим все файлы проекта (не забывайте делать бекапы на всякий случай), и сделаем чекаут:
# cd /_project # rm -rf * # svn checkout file:///svn/repos/_project_
Hooks
Хуки срабатывают на разные события Subversion, вот некоторые из них:
- start-commit - запускается до начала транзакции, может быть использован для проверки прав.
- pre-commit - запускается в конце транзакции, но до commit, часто используется для валидации данных, например для проверки не пустых лог-собщений.
- post-commit - запускается после транзакции, может быть использовано для отправки e-mail или для резервирования хранилища.
- pre-revprop-change - запускается до изменений в ревизии, могут быть использованы для проверки доступа.
- post-revprop-change - запускается после изменений в ревизии, могут быть использованы для отправки e-mail или для резервирования изменений.
Есть еще "post-lock", "post-unlock", "pre-lock" и "pre-unlock", как видно из названий он срабатывают при блокировке. Я не буду их разбирать, потому что они у меня интереса пока не вызвали.
Post-Commit Hook
Этот хук срабатывает после любого commit'a репозитория, для его активации надо скопировать шаблон и наделить правами на запуск:
# cd /svn/repos/_project_/hooks # cp post-commit.tmpl post-commit # chmod u+x post-commit
Далее, отредактируем файл post-commit, закомментируем все лишнее и добавим наши команды для обновления проекта:
cd /_project_ && /usr/local/bin/svn update
Примерного такой вид в результате будет иметь содержимое ваше хука:
#!/bin/sh # # ... тут куча комментариев ... # REPOS="$1" REV="$2" cd /_project_ && /usr/local/bin/svn update #commit-email.pl "$REPOS" "$REV" commit-watchers@example.org #log-commit.py --repository "$REPOS" --revision "$REV"
далее, проверим работает ли хук от имени под которым запущен Subversion и выполним его:
# su www # ./post-commit
Если ответ примерно такой:
At revision тут_номер_ревизии
то все в порядке!
А если нет, то у вас ошибка в хуке, пишите в комментарии - помогу.
Собственно хук готов, теперь его необходимо проверить, сделайте commit и посмотрите, обновился ли ваш проект - если нет, то скорее всего проблемы с правами на запись файлов вашего проекта.
Необходимо разрешить права на запись файлов веб-проекта пользователю/группе от которой запущен subversion, скорее всего это www.
# cd /_project # chown -R www:www * # chown -R www:www .* # chmod -R 775 * # chmod -R 775 .svn
P.S. Спасибо дуду за помощь в тестировании хук :)
Комментарии
У меня вопрос по поводу загадочной строчки
"cd /_project_ && /usr/local/bin/svn update"
если у меня репозитарий находтся в /var/svn а сам веб проект в /var/www
то эту строчку я должен переписать так
"cd /var/svn && /var/www update" ?
а еще вот:
root@server:/var/svn/hooks# su www-data
$ ./post-commit
sh: ./post-commit: Permission denied
(пермишен денайд выдает)
Что делаю не так? Спасибо!
В примере:
свн репозиторий - /svn/repos/_project_/
файлы проекта - /_project_
Из это следует, что вам надо
покажите права на этот файл
root@server:/var/svn/hooks# ls -l post-commit
-rwxr--r-- 1 root svn 2041 2009-07-16 16:13 post-commit
я так понимаю сменить владельца надо? (спасибо вы мне очень помогаете)
Юра Диденко, да, смените права на файл и не забывайте, что надо обязательно иметь права на выполнение (x)
зы. пожалуйста :)
root@server:/var/svn/hooks# chmod -R g+wsx post-commit
root@server:/var/svn/hooks# ls -l post-commit
-rwxrwsr-- 1 www-data svn 2041 2009-07-16 16:13 post-commit
root@server:/var/svn/hooks# su www-data
$ ./post-commit
./post-commit: 49: /usr/local/bin/svn: not found
./post-commit: 52: /usr/share/subversion/hook-scripts/commit-email.pl: not found
$ exit
я так понимаю первая проблема он не нашел репозиторий все правильно он у меня в /var/svn исправил, вторую опцию я просто закомментировал в файле post-commit
запускаю
root@server:/var/svn/hooks# su www-data
$ ./post-commit
./post-commit: 49: /var/svn: Permission denied
./post-commit: 52: : Permission denied
что-то как-то сложно с правами доступа
/var/svn - это у вас путь до репозитория или до приложения?
да это путь до репозитария
ну так надо не путь до репозитория, а путь до приложения
нам путь до репозитория не нужен
svnadmin create /var/svn
chown -R www-data:svn /var/svn
chmod -R g+ws /var/svn
Так был создан репозитарий (я создавал из примера http://habrahabr.ru/blogs/ubuntu/20525/)
Если в файле post-commit записать так:
cd /var/www && /usr/local/bin/svn update
то получается следующее:
$ ./post-commit
./post-commit: 50: /usr/local/bin/svn: not found
./post-commit: 53: : Permission denied
Это понятно такого пути просто нет /usr/local/bin/svn , репозитарий находится в папке /var/svn веб каталог он же каталог проекта в папке /var/www
/usr/local/bin/svn - это путь до программы, а не репозитория, и нам нужен путь до программы, а не до репозитория!
выполните комманду
root@server:/var/svn/hooks# whereis svn
svn: /usr/bin/svn /usr/share/man/man1/svn.1.gz
я понимаю я туплю, еще раз спасибо вам, за то что нервов еще хватает на переписку со мной ;) спасибо
/usr/bin/svn - вот это ваш путь, замените "/usr/local/bin/svn" на "/usr/bin/svn"
это все форум http://pyha.ru/ меня таким сделал, я все терплю :)Уже лучше стало:
root@server:/var/svn/hooks# su www-data
$ ./post-commit
Пропущено '.'
./post-commit: 53: : Permission denied
))
Я вот так записал:
cd /var/www && /usr/bin/svn update
ок, теперь зайдите в каталог
и выполните
root@server:/var/svn/hooks# cd /var/www
root@server:/var/www# /usr/bin/svn update
Пропущено '.'
Аааа что он хочет?)))
Юра Диденко, а вы делали чекаут?
да небыло чек аута, я пересоздал репозиторий выполнил чекаут но вот что получил
root@server:/var/svn/hooks# ls -l post-commit
-rwxr-xr-x 1 www-data svn 2030 2009-07-17 14:28 post-commit
root@server:/var/svn/hooks# su www-data
$ ./post-commit
Type 'svn help' for usage.
$
? почему
Покажи содержимое файла "post-commit" (только вырежи оттуда комментарии)
Все остальное что выше закоменченно!
REPOS="$1"
REV="$2"
cd /var/www && /usr/bin/svn
#/usr/share/subversion/hook-scripts/commit-email.pl \
# "$REPOS" "$REV" commit-watchers@example.org
root@server:/var/svn/hooks# whereis svn
svn: /usr/bin/svn /usr/share/man/man1/svn.1.gz
рабочий каталог проекта /var/www
чекаут делал вот так:
svn checkout file:///var/svn/social /var/www
(я чувствую где-то какая-то мелочь))
Куда "update" дел?
Как вас зовут? я выпью за ваше здоровье сегодня! Спасибо! Вы мне очень помогли!
п.с. выставил всем вложенным файлам и папкам владельца www-data.svn как так получилось, до сих пор не понял, мускул отвалился... еще кое-чего... сижу правлю руками, но твой хук;) работает, и мега круто работает! Спасибо еще раз!
Меня зовут Михаил Андреев :)
очень приятно Михаил!
>я понял почему мускул отвалился и как владельца ошибочно установил....
cd /_project
chown -R www:www *
chown -R www:www .* <- зачем вот это делаем?
chmod -R 775 *
chmod -R 775 .svn
для скрытых файлов
можно ли настроить посткоммит так, чтобы файлы сливались на другой сервер по ftp?
Darkside, можно
Здравствуйте. Помогите пожалуйста написать хук.
Мне нужно чтобы после команды update(после обновления номера ревизии) файлы из одной директории копировались в другую.
Я так понимаю что нужно использовать хук post-revprop-change.bat. Нужно добавить в него строку xcopy D:\Repository*.* /d D:\test /s /y > info.txt
Что toe нужно добавить в хук чтобы он заработал?
Спасибо!
Забыл написать, что я это делаю на Windowx XP.
Михаил, а
это вообще у вас работает? Если да, то больше ничего не надо, хотя возможно надо прописать полный путь до xcopy.Я под виндовс не делал хуков, только под FreeBSD и Linux
Да. Если я вручную запускаю этот батник, то он все выполняет. А если я выполняю команду svn update, то номер ревизии меняется но этот хук не отрабатывает.
Может там нужно прописать какие условия? И если они выполняются то выполнять копирование
А разве у вас нету хука "post-update"?
Неа, нету.Вот все что есть:
post-commit,post-lock,post-revprop-change,post-unlock,post-update,pre-commit,pre-lock,pre-revprop-change,pre-unlock,start-commit
Если я сам сделаю батник с названием post-update.bat и туда вставлю строку копирования, будет работать?
:)
А не, сорри. Это я уже сам его создал руками. Его не было:)
Я проверил, что если его вручную создать, то он не работает.
Может я что то не правильно делаю.
После команды svn update хук post-update должен автоматически срабаотывать без дополнительных команд и настроек?
Ну, в принципе вам подойдет "post-revprop-change", потестите его, впишите в хук:
И посмотрите - срабатывает ли он. Также можете потестить методом тыка все хуки и узнать, какой вам понадобиться...
Хуки если вручную запускаю отрабатывают как надо. а вот после update не работает:((
Не знаю что еще придумать:(
Я говорю, впишите во все хуки, нечто
и узнаете, что выполнилось
Я так и сделал. Ни один из хуков на update не сработал. Но зато срабатывает хук post-commit после команд delete и import
А Вы не подскажете еще, на какие команды срабатывает хук post-revprop-change.
Сделал как описанно выше, запуская hook скрипт и получаю
Skipped '.'
Что это может быть?
REPOS="$1"
REV="$2"
cd /var/www/vhosts/c2342/night && /usr/bin/svn update
/var/www/vhosts/c2342/night - это мой хомяк :)
и в ручную запускал хук и коппитить пробовал и видел ту же ошибку в логах свн клиента
Собственно вот, запускаю в ручную из домашней дериктории (там, где проект должен лежать)
linux $ /usr/bin/svn update
Skipped '.'
разобрался, моя ошибка.
не сделал
svn import /_project_ file:///svn/repos/_project_
сейчас разбираюсь
Ну так проблема осталась или как?
Пока да :(
Если я в ручную скрипт запускаю - все выполняется корректно, а именно -
если были коммиты - папка проекта обновляется, если небыло коммитов, то так, как написано у вас:
At revision тут_номер_ревизии
Но когда я коммичу, оно мне пишет ошибку
post-commit hook failed (exit code 255) with no output.
пока не могу поять в чем дело :(
1 - не знаю, наверное попробую у хостера узнать. что я заметил, так это то, что на всех папках (в домашней дериктории и папка проекта и свн и прочее хранится) одинаковая группа (не знаю, имеет ли это значение).
2 - да, я когда проверял запускал сам хук файл
vitaly, у вас svn установлен как модуль apache? В хук добавьте инструкцию touch/mkdir для того чтобы потом определить права у созданного файла/каталога
> vitaly, у вас svn установлен как модуль apache?
не знаю :) могу узнать у хостера.
> В хук добавьте инструкцию touch/mkdir ...
т.е. попробовать создать дерикторию, перейти в нее и там попробовать update сделать?
Через хук создайте директорию, после чего посмотрите какие у нее права (команда ls -la)
прописал в хуковом скрипте создание дериктории - ничего не создало :( наверное прав нет (опять таки, запустил в ручную хуковый скрипт - все создало. значит ошибки в "синтаксисе" нет)
Да, скорее всего права, однако рекомендую прописать до программ полный путь, например /bin/mkdir, /bin/cp и т.д.
Узнать можно их через команду whereis (whereis cp)
при выполнении
где /var/www/ - папка проекта
file:///var/svn/ - папка репозитория
файлы из базы репозитория появляются не в /var/www, а в /var/www/svn
и при подключении с удаленного репозитория вылазиет ошибка :
А какие файлы у вас в /var/svn/ ?
Извините, всё напутал в попыхах )
svn import
проходит нормально, появляется содержимое репозитория, а вот после как раз файлы из базы репозитория появляются не вВ /var/svn директории :
conf
dav
db
hooks
locks
Вроде разобрался(ОС Debian) :
для меня выглядит как :
только нужно ещё добавить в конце папку проекта /var/www
то есть полностью команды выглядит так :
После этого
выдает
e1da, ну вроде все хорошо :)
adw0rd, извините, забыл поблагодарить, многие говорили мне, что так работать с svn невозможно(видимо очень мало русскоязычных материалов).
e1da, вы о хуках, или о тех примерах команд которые скидывали?
я и о хуках в частности, и о синхронизации svn репозиториев на разных системах.
А если репозиторий и рабочий проект на разных серверах.
Вот пишем на продакшн-сервере:
Что то не видно тут hooks.
Как можно отловить событие? Хук нашел только в репозитории.
В этом случае надо заходить на удаленный сервак и выполнять svn update. А как это вам решать.
Вот еще почитайте http://wiki.agiledev.ru/doku.php?id=automation:build_package_deploy , может заинтересуетесь.
Допустим задача простая: на "обновленном|update" сайте в шаблоне прописать номер ревизии автоматом. Что бы визуально на разных копиях проекта можно было отследить версию. Наверное самое простое написать скрипт обновления.
Можете создать скрипт, который будет срабатывать при http-запросе. Он будет осведомлен о коммите, после чего будет запускать апдейт.
Это самое простое и не красивое решение.
много букф афтор жжот
тут более понятно http://blog.plastilin.org.ua/2009/05/subversion-svn-freebsd.html
больше интересует как сделать игнорирование папок в хуках например у меня в СВН есть движок и папка files хочю пряму на сервере в СВН поместить рабочую копию минуя копирования папки files с 20 гб
хуки до сих пор не автоматизированы в рабочей копии сайта хранится хлам '.svn'
логично делать хук примерно такой конструкции
логично делать хук примерно такой конструкции
Это не хлам, это фича. Можно всегда откатить либо задиффить файлы, и т.д.
Я средствами nginx лочу доступ ко всем файлам начинающиеся с ".*" и не вижу проблем с хранением "хлама", но если вам не нужно это, то делайте svn export.
ну что мне вам сказать, либо у вас нет каталога ./files/, либо он не под свн
еще проблема после постинга в каталог сайта появляются .mine .r17 .r18 как от них избавтся например до актуальной версии
Удалить файлы, после чего апнуться. Но по нормальному, во время слияния надо коррентно мержить, а если пофиг, то пропускать из репы версию поверх рабочей или наоборот.
Здравствуйте! Прочитав всю тему и комментарии, у меня не получилось сделать так, чтобы после фиксации рабочего проекта, его последняя версия выгружалась из хранилища в указанную папку. Допустим есть хранилище E:/SVN
папка E:/1 - в которой разрабатывается сам проект
и папка E:/2 - сюда должен попадать тот проект после фиксации.
Хотелось бы узнать, как должен выглядеть post-commit.bat в этом случае?
Давайте разберемся по порядку, сначала создайте тесты для проверки работы хука. Например создавайте каталог в post-commit.bat или дописывайте файл, сами придумайте.
После чего, когда удостоверитесь что хук работает, делайте svn export или как вы там хотите выгружать данные в E:/2
Данные хочу выгружать с помощью хука, т.е. автоматизировать процесс обновления файлов на сайте до последней версии. Что бы я ни делал, хук не работает. Либо ничего не происходит, либо "операция завершена неудачно" или как-то там, при этом куча всяких "кракозябр" вылазит при фиксации. Я вот что хочу узнать, как правильно в самом хуке прописать пути.. наверно что-то с синтаксисом не верно. С SVN начал работать совсем недавно..поэтому полный чайник ещё в этом плане.
пропишите банально в post-commit.bat:
и удостоверьтесь что каталог создался
Не создаёт, в окошке фиксации пишет вот это:
post-commit hook failed (exit code 1) with output:
и тут куча непонятного всего...
что делать?
привести сюда
т.е. мне надо полностью весь ответ
вот ошибки:
post-commit hook failed (exit code 1) with output:
"#!" Ґ пў«пҐвбп ўгв॥© Ё«Ё ўҐиҐ©
Є®¬ ¤®©, ЁбЇ®«пҐ¬®© Їа®Ја ¬¬®© Ё«Ё Ї ЄҐвл¬ д ©«®¬.
.
.
.
и дальше всё в таком же духе, это тестовый хук, который вы говорили сделать.. да и любые другие то же самое выдают.
http://www.artlebedev.ru/tools/decoder/ вот вам на будующее, если текст нечитаем...
а теперь покажите свой хук.
Там не должно быть #!/bin... У вас виндовс, а не никсы :)
Взял стандартный post-commit, удалил всё закомментированное и добавил mkdir c:/testdir
не работало.
дошло до того, что кроме этой строки вообще ничего не осталось((
Это строки недолжно быть не в коем случает, если она есть, то ваш хук на ней и остановится, вызвав ошибку. Что собственно мы и видим
Скажите пожалуйста, что надо прописать\удалить в стандартном пост-коммите?
Я не работаю с Windows, даже не знаю как для нее выглядят хуки. У вас же я так понял есть примеры? Должны идти в комплекте с сабвершеном для Windows.
вот чистый хук:
!/bin/sh
.
.
тут куча закоментированного текста
.
.
REPOS="$1"
REV="$2"
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
и всё.
А называется он post-commit.bat?
Да, расширение я поменял с tmpl на bat, говорят можно ещё exe, но там что-то ещё надо шаманить.
К сожалению не смогу вам помочь, так как у меня нет Windows, что бы проверить и написать вам готовый хук. Однако вы можете дать мне удаленный доступ по RDP на свой компьютер с Windows
Посмотрите вот эту страничку http://www.svnforum.org/2017/viewtopic.php?t=1694
Возможно она сможет немного помочь
Мне то оно ничем не поможет, это возможно вам поможет. Мне нужна платформа для проверки, а не информация, если вы не может предоставить доступ, то иначе вам я никак не смогу помочь...
Спасибо за терпение и помощь! Всё получилось и прекрасно работает!!!
пожалуйста
Приветствую! Статья - то чего не хватало, для нормальной работы. Но возникла проблемка:
Когда коммичу из черепахи - говорит, что проблема с хуком
post-commit hook failed (exit code 2) with output:
cd: can't cd to /usr/local/www/apache22/data/dev.*.ru
Если же выполняю данный хук из под юзера svn - то всё ок:
su svn
./post-commit
At revision 6
В чём может быть трабла?
Покажите свой post-commit. А svn у вас работает из под пользователя svn?
Разобрался! Для юзера svn каталог www был закрыт. Проблема решил. Огромное спасибо за пост!
Пожалуйста :)
Добрый день. Проблема следующая: сделал экспорт с репозитория в локальную копию с помощью post-commit, но всем файлам, которые экспортируется, во первых, выставляется права -rw-r--r--, а, во вторых, владелец - пользователь, который делает коммит. Как можно с помощью svn выставлять права для файлов, которые экспортируется? Спасибо
странно, владелец должен быть тот от чего имени работает демон subversion, так как именно он запускает post-commit
назначьте файлу post-commit права пользователя от которого работает демон сабвершена и укажите права на запуск только хозяину (rwx------)
ps. по поводу назначения прав, то используйте chmod в post-commit, либо меняйте дефолтные настройки маски прав при создании файлов
решил все проблемы установкой пакета sudo
и
svn.sh
sudo + subversion - вот что упростит работу с хуками
Подскажите, как правильно реализовать export бранчей и транка.
У меня структура хранилища такая: myproject/trunk, myproject/tags, myproject/branches.
При комите в trunk хотелось бы делать так:
А при комите в myproject/branches/branch1
Немного ошибся:
при комите в myproject/branches/site2
Если вы имеете ввиду проверку куда экспортировать, то можно получить через "svn log -r 1000 -v" пути и в баше распарсить это дело
После коммита - новые файлы добавляются, а вот при удалении - удаляются из репозитория, но остаются в проекте - не подскажете почему?
А как вы делаете обновление проекта? Через svn export?
Здравствуйте, Михаил.
У меня есть несколько проектов в папке /var/svn/, один из которых называется test. Соответственно я создаю для него post-commit:
REPOS="$1"
REV="$2"
svn checkout file:///var/svn/test /var/www
cd /var/www/svn/test && /usr/bin/svn update
После запуска ./post-commit получаю:
Получена редакция 1.
Пропущено '.'
Что за "Пропущено '.'"?
Зачем каждый раз делаете checkout?
checkout убрал. А Пропущено '.' осталось.
Потомучто вы не сделали checkout туда предварительно.
1. Сделайте сначала чекаут
svn checkout file:///var/svn/test /var/www/test
svn: '/var/www/trunk' is already a working copy for a different URL
root@forge:/var/svn/test#
root@forge:/var/svn/test/hooks# ./post-commit
Пропущено '.'
Как так?
Вас это:
не смущает? Подчистите сначала /var/www. У вас там видимо остался .svn и т.д.
У меня в /var/www/ остались только ссылка на /var/www/svn/.
root@forge:/var/www/svn# svn checkout file:///var/svn/trunk /var/www/trunk
A /var/www/trunk/trunk
A /var/www/trunk/branches
A /var/www/trunk/tags
Получена редакция 1.
Затем делаю root@forge:/var/svn/trunk/hooks# ./post-commit
Получаю "Пропущено '.'" Что это значит?
Мне нужно в post-commit хуке определять, куда делается комит, тоисть в branch или в trunk.
Есть ли какое либо решение, как можно такое реализовать? Спасибо
Лучше объясните зачем вам это, а то кажется что вы не по назначению используете svn
Разрабатывался проект. Комитилось все в trunk. После комита делается экспорт(хуком) в рабочую директорию. На данном этапе проект разбивается на 3 части:
основной, dev, test.
Для dev создается своя ветка. Нужно, чтобы хук не срабатывал, если комит делается с ветки, а только с trunk.
А, извините, теперь я вас понял :)
Я уже продолжительно время не работаю с svn, сейчас все больше hg и git использую. Поэтому могу только подсказать такой ход:
1. Вы пишите в post-commit следующее
Лог:
/var/svn/repo 830
тоисть репо и ревизия. Больше ничего нету. Есть какие либо предложения?
Вот нашел одно решение. Может кому то пригодится:
С помощью команды svnlook changed выводим список файлов, которые редактировались.
А дальше парсим вывод и анализируем в post-commit хуке
Ну я и хотел нечто подобное предложить в итоге )
Такой вопрос: почему хук может не вызываться после комита? Был написан коммит, который работал нормально. Его переписали - в результате перестал работать. Для отладки просто сделали хук:
Права 775
Пользователи svn.svn
В результате хук не вызываеться
Уже все ок. Глюкануло немного :)
Привет. Мб подскажете в чем может быть проблема?
Сделал svn-hook по аналогии с тем, как описано в статье (разница лишь в том, что svn-сервер(1) и сервер(2), на котором расположен проект - разные и мне необходимо обновлять лишь 1 папку).
Вот кусок кода из post-commit (все остальное закомменчено):
svn на 1ом сервере работает под пользователем subversion
если я выполняю скрипт вручную, то он исправно обновляет файлы на 2ом сервере и отсылает на e-mail уведомление с номером ревизии. Так же скрипт вроде как срабатывает автоматически, т.е. при каждом коммите он даже отправляет e-mail с указанием номера ревизии, но вот на самом сервере изменений не наблюдается. Как его заставить автоматически обновлять код проекта?
А вы под subversion скрипт ручками запускаете или под собой? Ну типа:
в первом случае (для su -l subversion):
возможно, что в этом и кроется вся ошибка...
для второго:
Скрипт запускал через ./post-commit
Вот и сейчас: за ночь было 3 коммита от программистов. На каждый коммит мне упало по письму на e-mail с номером ревизии. Но никаких изменений в проекте на сервере не замечено =/
использую svn вместе с ssh авторизацией.
smartsvn ходит туда по линку: ssh+svn://servername/var/lib/svn/project
написал post-commit:
cd /var/www && /usr/bin/svn co file:///var/lib/project
хук выполняется от пользователя user (я им хожу через ssh). т.е. хакинув в хук тестовое mkdir /var/www/test
получаю директорию принадлежащую user:user и с должными правами.
если делаю su user и выполняю post-commit То всё отрабатывает как надо.
если делаю коммит - то не работает. т.е. он выполняет всё (тестовое создание директории, выводы в логи) но вот именно чекаут (или апдейт) не делает...
описался, в хуке написано так:
cd /var/www && /usr/bin/svn co file:///var/lib/svn/project
попробовал вариант описанный тут: http://subversion.apache.org/faq.html#website-auto-update
написал, откомпилировал, сделал cron таск для !рута! - 0 эффекта. лог файл пустой. все логи говорят что таск запускают.
такое ощущение что svn, будучи запущен кроном или хуком просто выходит. без ошибок и прочих "мелочей"...
any ideas? :(
ОС Debian. Настроен svn и post-commit по вашей инструкции. Все работало нормально. Сейчас после коммита через клиент не отрабатывает post-commit.
Помогите пожалуйста. Изменений никаких не производилось. Вроде-бы все права и владельцев проверил.
Если я выполняю из консоли su www-data cd /var/lib/svn/projact $$ /usr/bin/svn update, то коммит проходит. Если коммит делается из программы клиента, коммит проходит, но в проекте изменений не появляется.
Здравствуйте,
У меня не выполняется файл из под пользователя svn
$ ./post-commit
svn: Can't open file '.svn/lock': Permission denied
svn: Can't open file '.svn/lock': Permission denied
Права все проставлены. Куда капнуть?
Судя по приведенному вами ответу от post-commit у вас как раз таки проблема с правами. Выполните:
и рещультат выведите сюда
Здравствуйте, не можете ли вы мне помочь (или направить внимательнее читать комментарии)
Проблема: после запуска ./post-commit
Ошибка:./post-commit: 50: /hooks/mailer.py: not found
Может чтоит закоментировать 50-ю строку в post-commit, так как видимо у вас и вправду нет /hooks/mailer.py :)
По хорошему, нужно каждый раз удалять корень проекта и делать # svn co ...
Доброго времени суток. Я, можно сказать, почти не знаком с svn-ом (очень поверхностно), поэтому разобраться трудновато(
Можно получить небольшую консультацию, если не сложно?
У меня есть сайт, который лежит на ftp, есть репозиторий в svn, в котором лежит копия сайта. Необходимо, что бы после комита svn обновлял измененные файлы помимо svn-а еще и на ftp. Права на чтение и запись везде есть. Нет ли образца Post-commit hook с подробными комментариями где что прописывать?
Буду очень признателен! Заранее спасибо!
P.S. прошу не ругаться если написал глупость, я только учусь.
Оставлю здесь на всякий случай решение проблемы 'Warning: post-commit hook failed (exit code 255) with no output.':
!/bin/bash в начале post-commit скрипта
вылетает ошибка
post-commit hook failed (exit code 1) with output:
Error: Authentication realm: Subversion repository
Error: Password for 'www': Authentication realm: Subversion repository
Error: Username: svn: E170001: Unable to connect to a repository at URL 'http://domen/svn/project'
Error: svn: E170001: OPTIONS of 'http://domen/svn/project': authorization failed: Could not authenticate to server: rejected Basic challenge (http://domen)
Я зашел на сервер под пользователем www (апач) от имени которого и запускается хук и попытался запустить хук вручную, он запросил пароль для этого самого пользователя www. После ввода пароля хук успешно отработал. Как я понял вся проблема и заключается именно в этом запросе пароля. Как решить эту проблему?
Спасибо за внимание! Буду благодарен за помощь.
Покажите сожержимое вашего хука, который вы запускаете из под www,
потом сделайте ls -la <файл_хука>
и покажите историю ввода команд из под www когда вы запускаете хук
содержание хука такое же как написано у вас
ls -la
-rwxr--r-- 1 www www ...
Тогда почему у вас спрашивается пароль? sudo или нечто подобного в хуке нет
ну вот и я не знаю) буду копать дальше
Помогите настроить post-commit для centos.Основной(1) репозиторий на одном сервере.Другой(2) сервер на бранче.И нужно чтобы при комите этого бранча делался svn up на сервере(2).Такое возможно?
Что значит "сервер на бранче"? На сервере N2 копия от какого-то бранча вашего репозитория?
Да.
Добрый день! прошу помощи в простой задаче, в которой не могу разобраться...
я поставил svn, и мне нужно запретить заливать в него файлы с определёнными расширениями, и папки с определёнными названиями. как я понял нужно пользоваться hook'ами. Подскажите как это сделать... Спасибо.
Нет, это делается через http://adw0rd.com/2009/03/28/svn-authz-access/ и прочитайте комментарии, ваш случай http://adw0rd.com/2009/03/28/svn-authz-access/#comment-6034
Нет, я имел ввиду что человек может заливать картинки и документы(.jpg, *.doc) и прочее, но к примеру не может заливать исполняемые файлы(.exe).
с папками также... только где-то в подпапках небыло папок с названием ( (...)/POGRAM ).
Вы переходили по ссылкам? Видел комментарий другого человека, на который я дал ссылку?
Можете конечно и хуки использовать, что имеено у вас не получилось с хуками? Вы же пробовали разобраться с ними?
комментарий видел. спасибо!
только так и не понял как забить относительный путь, чтоб глубина папки была любой.
с хуками испугался разбираться.. понятно что pre-commit, ну в принципе это всё что пока понятно..
Столкнулся с такой проблемой - настроил хук по вашей статье, однако при попытке выполнить commit изменения на сервер попадают, но клиент зависает без каких либо ошибок, а на сервере висит процесс svn update. Если указывать любые другие команды - то все проходит идеально. Что это может быть?
Разобрался - для запуска svn update он хочет чтобы ввели логин и пароль пользователя, под которым запущен svnserv
Написал краткий ман по использованию svn+hooks http://unix-way.ru/index.php/shpargalka-po-komandam-nix/svn-repozitorij
Оставьте свой комментарий