Веб-разработка

индекс
236,88

svn tips

Сегодня занимался устройством проекта и возился с svn - решил поделиться некоторыми советами:
Автоматическая заливка кода на сервер из репозитория после коммита
Версионирование файлов настроек (Settings.php/xml/yml)
Храниение жирных и малоизменчивых сторонних библиотек в репозитории с быстрым чекаутом проекта


  • Автоматическая заливка кода на сервер из репозитория после коммита
    сайт на php и захотелось, чтоб после коммита в репозиторий код на демо-сервере автоматически обновлялся.
    Cделать это можно с использованием svn-hooks: в корне каждого репозитория есть папочка hooks, в которую можно положить чтонить исполняемое (например shall-скрипт: full/path/to/svn update path/to/web/folder) и назвать определенным образом (например post-commit.sh или post-commit.bat) - и после каждого комита этот скрипт будет выполняться и обновлять код на демке (возможны проблемы с разрешениями на доступ к файлам - читайте ссылки).
    При этом на демку будут выкладываться и служебные файлы svn. Эта проблема решается настройками apache:

    <DirectoryMatch "^/.*/\.svn/">
    Order deny,allow
    Deny from all
    <DirectoryMatch>


    или использованием svn команды export (http://svnbook.red-bean.com/en/1.0/re10.…) вместо update (http://svnbook.red-bean.com/en/1.1/re28.…).

    Тут перед вами встаёт тонкий выбор. Использовать export кажется проще. Однако при использовании update вы потом сможете залить быстрые фиксы сделанные прямо на сервере в svn репозиторий.

    links:
    http://arstechnica.com/articles/columns/…
    http://subversion.tigris.org/faq.html#we…

    кстати с использованием svn-hooks можно делать очень много полезного: запускать тесты, оповещать кого-нибудь, автоматически собирать приложение и т.д.

  • Как версионировать настройки (Settings.php/xml/yml)
    итак у нас есть файл с настройками он будет правится под каждую машину на которую ваше приложение будет ставиться. Поэтому каждый групповой коммит с новой машины будет переписывать этот файл в репозитории и при обновлении рабочей версии на другой машине он тоже может неприятно переписать настройки на этой машине. Как быть нам подсказывает http://subversion.tigris.org/faq.html#ig…
    следует скопировать файл с начальными настройками например settings.php в settings.template.php и добавить settings.php в svn:ignore. И в результате при развертывании приложения надо произвести обратную операцию копирования settings.template.php в settings.php (settings.php отсутствует в репозитории) и потом подправить его под конкретную установку. Из-за svn:ignore файл settings.php коммитеться уже не будет

  • Как хранить жирные сторонние библиотеки
    В моем случае это было dojo (прекрасный js toolkit), который намного больше самого проекта (и практически не будет меняться), а попытка залить его в репозиторий и получить обратно занимает неприятно много времени. Поэтому я немного модифицировал предыдущий прием для решения этой проблемы:
    итак мы имеем глубокую папку dojo - добавляем ее в svn:ignore - и архивируем в extract_to_dojo.archiv - который и заливаем в репозиторий. При разворачивании на новом месте надо произвести обратную операцию.
    В принципе для автоматизации развёртывания новой версии можно написать небольшой скриптик, который пройдёт по всем /extract_to(.?)\.rar/ и разархивирует их в $1



Для тех кто вынужден работать на платформе Win полезная сборка svn + apache + gui - http://www.visualsvn.com/
+12
3 июня 2008, 22:35
48

комментарии (16)

0
mkdotam #
Приятно. (:
+3
bladeofsteel #
По поводу жирных чужих библиотек.

Нам оказалось удобнее использовать svn:external для включения библиотек в дерево проектов.
0
nicola #
угу спасиб посмотрю и пересмотрю
0
Kupyc #
Эх, кабы SVN, еще умела "экстерналить" не только директории, но и файлы :\.
0
bladeofsteel #
Угу, иногда не хватает
0
freeatnet #
> shall-скрипт
Скрипт все-таки shell

Не подскажете, случаем, как получить номер последнего коммита из удаленного репозитория в виде числа? Есть svnlook -youngest PATH, но это для локальных.
0
Paul #
svn info URL — там в инфе есть номер последней ревизии.
0
freeatnet #
У меня Svnlook используется следующим образом: tar -zcf project-r`svnlook youngest REPOS_PATH`.tar.gz project. Хотелось бы научиться делать такое же и с удаленным репозиторием.
0
Paul #
grep и sed вам в помощь ;)
0
grieverrr #
насчет пост-коммита: svn up лучше делать во временную папку, а из нее уже rsync'ом с --exclude=.svn валить все на сервер. так избавляемся от описанных геморроев
незнаю правдо рсинк под винду есть нет
0
egorF #
кстати, элегантно, спасибо.
+1
chemodax #
Правильная ссылка на VisualSVN Server это http://www.visualsvn.com/server
А http://www.visualsvn.com это ссылка на VisualSVN — интеграция Subversion в Visual Studio.
0
Timosha #
из 3-х предложений согласен только с первым. второе спорно, а третье - костыль
0
nicola #
расскажите как это сделать элегантней
0
Timosha #
что именно? :)
если про третье, то только смириться. не так уж и часто делается svn co|export. или не хранить сторонние библиотеки в проекте в принципе
0
svdesign #
Первый пункт практически не юзабельный потому что чаще репозиторий находится физически на другом сервере, скорее всего в офисе, а рабочая копия на хостинге. Обычно в таких случаях приходится создавать RSA ключи для пезпарольной авторизации и запускать svn update на удаленном сервере.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.