Работаю частенько над разными проектами, в том числе и написанием модификаций к некоторым движкам и решил, что пришло время использовать систему контроля версий. Своей простотой в настройке и пользовании попал SVN. Помимо простоты о нем еще и куча материалов в сети. Да, хотел один период поставить себе GIT, но потом понял, что это лишнее в моем случае, так как с репами работаю только я.
Краткое описание:
1. Система — Debian 7
2. Папка с сайтом — /home/www/site.com/
3. Папка с репозитарием — /home/svn/site.com/
4. Временная папка с проектом и удаленными лишними файлами — /home/svn/repo/
Имеется сервер с Debian 7, поэтому логичным будет установить svn с репозитария:
# aptitude install subversion
Создадим группу svn и добавим в нее юзера веб-сервера:
# addgroup svn # addgroup nginx svn
Приступаем к созданию репозитария:
# mkdir /home/svn # svnadmin create /home/svn/site.com
Репозитарий создался, пора его настроить, чтобы у гостей не было доступа:
# nano /home/svn/site.com/conf/svnserve.conf
Раскомментируем:
anon-access = none auth-access = write password-db = passwd
Создадим «учетки», тоесть допишем логины и пароли для Вас и напарников:
# nano /home/svn/site.com/conf/passwd
Дописываем пользователей в формате:
username = password
Теперь пора добавить хук(hook). Хук ы SVN — это описание скрипт, который запускается при определенном событии в системе контроля версий. После создания репозитария у нас в папке репы должна быть папка hooks, в которой можно найти шаблоны на разные события. Название хука — это какое-то событие к которому можно дописать скрипт (сам хук).
Так как рабочие проекты лежат в другой папке, мне понадобится хук для обновления проекта после создания коммита. Такой хук есть — post-commit. В черновиках в каждом хуке есть описание к нему, поэтому не буду его копировать зря, выложу только пример кода:
REPOS="$1" REV="$2" cd /home/www/site.com/ && /usr/bin/svn update chmod -R 777 \ /home/www/site.com/sitemap/ \ /home/www/site.com/tmp/
Задача этого хука обновить папку с сайтом и рекурсивно выставить на папки sitemap и tmp права доступа 777. Дописать можно много чего, главное, чтобы фантазии хватило.
Запустим сервер как демон:
# svnserve -d -r /home/svn/site.com
Создадим локальную копию:
# cd /home/www/ # svn co file:///home/svn/site.com/
Мне же надо было контролировать работу только с частью проекта, а такие вещи как логи или папка с кешем вообще не нужны в svn, поэтому самым простым решением было создать копию проекта, почистить ее и только тогда импортировать в репозитарий. Собственно это и сделаем.
Для начала скопируем проект во временную папку:
# cp /home/www/site.com /home/svn/repo
Теперь в папке /home/svn/repo должны лежать файлы с вашего проекта. Удалите тут все файлы, за которыми вы не будете наблюдать через svn.
Импортируем в репозитарий:
# svn import -m "Первый коммит" /home/svn/repo/ file:///home/svn/site.com
Если всё прошло хорошо, то удаляем временную папку:
# rm -R /home/svn/repo
В целях безопасности, перекроем доступ к файлам svn через браузер:
nginx
location ~ /.svn/ { deny all; }
apache
Order allow,deny Deny from all Satisfy All
Теперь можно пробовать что-то закоммитить.
Удачи! 🙂