Поднимаем subversion для приятной разработки
В один прекрасный день мне надоело заливать по ftp\ssh все изменения, внесённые в проект. К этому моменту я уже вынашивал идею перенести разработку под управление SVN — контроль версий, всё-таки приятная штука. В итоге было решено совместить приятное с полезным — и контроль версий, и автоматическое обновление проекта. По традиции — повествование будет вестись на примере моего любимого debian'a.
Заметку можно считать дополнением статьи svn tips (по крайней мере — первого пункта).
Про установку\настройку SVN можно почитать в следующих топиках:
- Установка и настройка SVN (сервер+клиент)
- Установка SVN+Trac+TracWebAdmin
- Настройка Apache2.2+Nginx+eAccelerator+SVN+Trac на медленном VDS — часть вторая
- Installing Subversion (svn) on Linux (Debian Stable)
/etc/init.d/svn:
Дадим всем право на исполнение, настоятельно порекомендуем системе запускать svn при старте и заодно стартанём его:#!/bin/sh -e # # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Get LSB functions . /lib/lsb/init-functions . /etc/default/rcS SVNSERVE=/usr/bin/svnserve SVN_USER=subversion SVN_GROUP=www-data SVN_REPO_PATH=/usr/share/svn/ # Check that the package is still installed [ -x $SVNSERVE ] || exit 0; case "$1" in start) log_begin_msg "Starting svnserve..." umask 002 if start-stop-daemon --start --chuid $SVN_USER:$SVN_GROUP --exec $SVNSERVE -- -d -r $SVN_REPO_PATH then log_end_msg 0 else log_end_msg $? fi ;; stop) log_begin_msg "Stopping svnserve..." if start-stop-daemon --stop --exec $SVNSERVE then log_end_msg 0 else log_end_msg $? fi ;; restart|force-reload) "$0" stop && "$0" start ;; *) echo "Usage: /etc/init.d/svn {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
chmod a+x /etc/init.d/svnНастроим обновление рабочей копии при коммите — хук /usr/share/svn/hooks/post-commit:
update-rc.d svn defaults
invoke-rc.d svn start
Не забываем выдать право на исполнение:#!/bin/sh exec > /tmp/svnup 2>&1 # весь вывод скрипта будет направлен в файл /tmp/svnup for path in `svnlook dirs-changed /usr/share/svn | fgrep '/trunk/' | cut -d '/' -f 2- | sort -u` # получаем список директорий, изменённых в коммите, отрезаем первую # часть (в моей репе - /trunk) и, если такой путь есть — делаем там svn up do if [ -d "/var/www/$path" ] then echo $path /usr/bin/svn up -N /var/www/$path fi done
chmod a+x /usr/share/svn/hooks/post-commitА так же — проследить за тем, чтобы у пользователя subversion:www-data были права на запись в необходимые каталоги /var/www/$path.
Дальнейшая работе (обустройство репозитария) уже выполняется на машине разработчика (ну разве что — потом выгрузить рабочую копию на сервере в нужную папку).
И, как обычно, — надеюсь, что материал окажется кому-нибудь полезным.