Pull to refresh

svn tips

Website development *
Сегодня занимался устройством проекта и возился с 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


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

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

    links:
    arstechnica.com/articles/columns/linux/linux-20050406.ars
    subversion.tigris.org/faq.html#website-auto-update

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

    Как версионировать настройки (Settings.php/xml/yml)
    итак у нас есть файл с настройками он будет правится под каждую машину на которую ваше приложение будет ставиться. Поэтому каждый групповой коммит с новой машины будет переписывать этот файл в репозитории и при обновлении рабочей версии на другой машине он тоже может неприятно переписать настройки на этой машине. Как быть нам подсказывает subversion.tigris.org/faq.html#ignore-commit:
    следует скопировать файл с начальными настройками например 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 — www.visualsvn.com
Tags: программированиеsvn
Hubs: Website development
Total votes 12: ↑12 and ↓0 +12
Comments 17
Comments Comments 17

Popular right now