В один прекрасный день мне надоело заливать по ftp\ssh все изменения, внесённые в проект. К этому моменту я уже вынашивал идею перенести разработку под управление SVN — контроль версий, всё-таки приятная штука. В итоге было решено совместить приятное с полезным — и контроль версий, и автоматическое обновление проекта. По традиции — повествование будет вестись на примере моего любимого debian'a.
Заметку можно считать дополнением статьи svn tips (по крайней мере — первого пункта).
Про установку\настройку SVN можно почитать в следующих топиках:
/etc/init.d/svn:
Дальнейшая работе (обустройство репозитария) уже выполняется на машине разработчика (ну разве что — потом выгрузить рабочую копию на сервере в нужную папку).
И, как обычно, — надеюсь, что материал окажется кому-нибудь полезным.
Заметку можно считать дополнением статьи 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:
#!/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Дадим всем право на исполнение, настоятельно порекомендуем системе запускать svn при старте и заодно стартанём его: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.
Дальнейшая работе (обустройство репозитария) уже выполняется на машине разработчика (ну разве что — потом выгрузить рабочую копию на сервере в нужную папку).
И, как обычно, — надеюсь, что материал окажется кому-нибудь полезным.