Pull to refresh

Поднимаем subversion для приятной разработки

Reading time2 min
Views4.6K
В один прекрасный день мне надоело заливать по ftp\ssh все изменения, внесённые в проект. К этому моменту я уже вынашивал идею перенести разработку под управление SVN — контроль версий, всё-таки приятная штука. В итоге было решено совместить приятное с полезным — и контроль версий, и автоматическое обновление проекта. По традиции — повествование будет вестись на примере моего любимого debian'a.
Заметку можно считать дополнением статьи svn tips (по крайней мере — первого пункта).

Про установку\настройку SVN можно почитать в следующих топиках:Создаём init-скрипт, для запуска svn-сервера с системой (изначально — скрипт был найден где-то на просторах интернета. вроде бы, я в нём что-то менял :) ).
/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
update-rc.d svn defaults
invoke-rc.d svn start
Настроим обновление рабочей копии при коммите — хук /usr/share/svn/hooks/post-commit:
#!/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.
Дальнейшая работе (обустройство репозитария) уже выполняется на машине разработчика (ну разве что — потом выгрузить рабочую копию на сервере в нужную папку).
И, как обычно, — надеюсь, что материал окажется кому-нибудь полезным.
Tags:
Hubs:
Total votes 60: ↑46 and ↓14+32
Comments60

Articles