Subversion – милая штучка.
unix/linux November 30th, 2007Однажды я научился ставить и настраивать subverison (svn) и использовать его в разработке веб-сайтов. Совместной разработке. С молодыми и красивыми программистами, которые иногда забывают забрать перед тем, как положить. Мне очень понравилось. Работать стало комфортнее.
А через время мне понадобилось наладить это дело на другом серваке, и оказалось, что я совсем не помню как это делал первый раз. Пришлось вспоминать. После третьего раза я записал. Для себя и для кого-то, кто посчитает мой вариант подходящим. Это, очевидно, не самая лучшая и не самая полная инструкция, однако, позволяет быстро начать использовать subversion. Все описанное для FreeBSD и apache2. Я ставил и на какой-то линукс. Различие только в способе установки ПО.
Ставим таким вот способом:
# cd /usr/ports/devel/subversion
#make WITH_MOD_DAV_SVN=yes WITHOUT_BDB=yes install clean
WITH_MOD_DAV_SVN – это нужно для того, чтобы мы могли использовать апач для доступа к репозитарию. У subversion есть и свой сервер, я выбрал апач. Работает это только для apache2.
WITHOUT_BDB – вместо BDB мы будем использовать FSFS. Почему, не помню. Здесь, наверное, написано.
Конфигурим апач. В моем случае это /usr/local/etc/apache22/httpd.conf. В первой секции должно быть, среди прочего:
LoadModule dav_module libexec/apache22/mod_dav.so #«Если эта строка присутствует, ее надо закомментировать или удалить», — так написано у меня в заметках. В рабочем конфиге строка есть, но не закомментирована. Все работает.
LoadModule dav_svn_module libexec/apache22/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache22/mod_authz_svn.so
Где-нибудь в виртуальном хосте добавляем:
<Directory /var/tmp/svndata> #Путь к вашому репозитарию
</Directory>
<Location /rep> #Это так вы писать будете в адресной строке
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /var/tmp/svndata/conf/users #в этом файлике будут храниться юзеры в месте с их паролями.
Require valid-user
DAV svn
SVNPath /var/tmp/svndata
</Location>
Готово. Теперь надо сделать файлик юзерам. Мы ж будем наших программистов авторизировать, а кого попало в репозитарий не пускать. Кроме того, очень удобно смотреть кто чего и когда коммитил.
#htpasswd -cm /var/tmp/svndata/conf/users user1
Два раза вводим пароль для user1 и все. После этого делаем репозитарий – место, где хранятся наши бесценные исходники.
#cd /var/tmp
#mkdir svndata
#svnadmin create /var/tmp/svndata/
Делаем временную директорию, куда заливаем наши исходники.
#mkdir /var/tmp/tempdir
Потом импортируем их в репозитарий:
#svn import /var/tmp/tempdir/ file:////var/tmp/svndata –message “Initial repository layout”
Делаем пользователя www владельцем репозитария. Он у нас и писать туда будет. Мне не сильно нравится этот момент, но я поленился разбираться.
#chown -R www:www /var/www/svndata
И удаляем временную папку. (Не забудьте поставить пробел после первого слеша ;)
#rm -Rf /var/tmp/tempdir/
Про пробел после слеша я шучу. Мне нравится эта глупая шутка. Далее делаем папку, в которую будут писаться наши измененные файлы после коммита. Мы же захотим сразу видеть изменения на сайте.
#mkdir /var/www/mysite/html
Естественно, что /var/www/mysite/html является DocumentRoot какого-то там виртуального хоста. Точнее разрабатываемого сайта.
#cd /var/www/mysite/html
#svn checkout
Это мы выгребли наши исходники из репозиратия и положили их на сайте. Такое дело нам надо будет делать каждый раз, когда мы закоммитим новые изменения в коде. Для автоматизации этого дела надо написать маленький скриптик и положить его в специальное место.
Специальное место, это /var/tmp/svndata/hooks/post-commit
Скриптик сделан на php, так как на другом делать скриптики мы разленились.
#!/usr/local/bin/php
<?php
#REPOS=”$1″
#REV=”$2″
chdir(“/var/www/mysite/html “);
exec(“/usr/local/bin/svn –username svnuser –password ******** update 2>&1″, $out);
$mailbody = “OUT:\r\n”.implode(“\n”, $out);
mail(“majordeveloper@mymail.tld”, “Commited in “.$argv[1].” (rev. “.$argv[2].”)”, $mailbody);
?>
svnuser тоже должен быть в /var/tmp/svndata/conf/users. Скриптик вызывается каждый раз, когда происходит коммит и делает простую вещь: апдейтит исходники на сайте и о ситуации докладывает куда следует посредством электронной почты.
Не забудьте сделать скрипт исполняемым.
#chmod a+x /var/tmp/svndata/hooks/post-commit
Вот, собственно, и все. Теперь любимым клиентом svn (http://tortoisesvn.tigris.org/ к примеру) checkout с того сайтика, в конфиге которого настраивали svn, дописывем /rep, вводим логин и пароль. Исходники стянутся на нашу машину, где их можно смело портить и коммитить изменения.
Часто бывает, что некоторые директории нам в svn не нужны и уж тем более не должны переписываться на сайте при коммите. Например, templates_c, upload, user_images и прочее. Нам поможет такая команда:
#svn propedit svn:ignore /var/www/mysite/html/templates_c
В результате выполнения этой команды папка исключается из репозитария.
Нда… Мне кажется, что я не сильно внятно написал. Если вы не сильно с svn, то было бы четко почитать http://svnbook.red-bean.com/. Именно это я читал, пока курил принцип работы системы контроля версий.
Recent Comments