Украинское сообщество программистов

Управление изменениями на примере WordPress

Макс Ищенко
Опубликовано 22.08.2005 в Статьи

Продолжая начатую тему расскажу как я использую Subversion для управления исходными кодами сайта developers.org.ua. Конкретно о том, как поддерживать up-to-date копию WordPress вместе со своими изменениями.

Проблема в следующем. Проект включает в себя исходники внешних проектов (собственно WordPress и различные плагины к нему) плюс мои модификации к нему плюс файлы созданные “с нуля”. По хорошему, вносить изменения в исходники чужих библиотек – последнее дело, т.к. обрекаешь себя на вечную поддержку своих патчей к каждой новой версии. С другой стороны – иногда это единственный способ достичь желаемого.

К счастью, приличная система управления конфигурациями позволяет здорово упростить и максимально автоматизировать такую задачу. В частности, Subversion (как и CVS, от которой она недалеко ушла в этом отношении) поддерживает т.н. vendor branches.

A vendor branch is a directory tree in your own version control system that contains information provided by a third-party entity, or vendor. Each version of the vendor’s data that you decide to absorb into your project is called a vendor drop.

В двух словах алгоритм таков: сохраняя каждый релиз WordPress как vendor drop в Subversion мы можем вычислить разницу (diff) между любыми двумя релизами и затем применить (merge) ее к актуальной копии, которая содержит наши изменения.

Теперь на пальцах.

Дерево проекта выглядит следующим образом:

/
  3rd-party/
  www/
  ...

В 3rd-party целиком импортируется каждый новый релиз WordPress, в www хранятся файлы которые копируются на веб-сервер (включая свою копию файлов WordPress вместе с моими изменениями).

Наиболее трудоемкая часть работы – правильно выстроить цепочку vendor drops. Для этого мало просто импортировать каждый новый релиз, необходимо копировать каждый новый релиз поверх предыдущего, описывая разницу для Subversion. И создавать тег для каждого релиза, чтобы указать его при выполнении обновления.

Предположим, что актуальная копия (в www) содержит WordPress 1.5.1.3 и мы хотим обновить ее до версии 1.5.2. Создаем vendor drops:

$ svn import wordpress \
  svn://repository-path/3rd-party/wordpress-current \
  -m 'added WP release 1.5.1.3'
$ svn copy svn://repository-path/3rd-party/wordpress-current \
  svn://repository-path/3rd-party/wordpress-1.5.1.3 \
  -m 'tagged WP release 1.5.1.3'
# копируем релиз 1.5.2 поверх копии wordpress-current
$ cd wordpress-current
# svn add/mv/rm при необходимости и фиксируем изменения
$ svn ci -m 'upgraded WP to 1.5.2'
$ svn copy svn://repository-path/3rd-party/wordpress-current \
  svn://repository-path/3rd-party/wordpress-1.5.2 \
  -m 'tagged WP release 1.5.2'

Теперь репозиторий выглядит следующим образом:

  3rd-party/
    wordpress-1.5.1.3/
    wordpress-1.5.2/
    wordpress-current/
  www/
  ...

Выполняем обновление:

$ cd ../../www/
$ svn merge svn://repository-path/3rd-party/wordpress-1.5.1.3 \
  svn://repository-path/3rd-party/wordpress-1.5.2 \
  wordpress
U  wordpress\wp-includes\template-functions-category.php
...
U wordpress\wp-admin\categories.php
$ svn ci -m 'upgraded web copy to WP 1.5.2'

Все. :)

Теги: , ,

1 звезда2 звезды3 звезды4 звезды5 звезд (Еще не оценили)
Загрузка ... Загрузка ...

Понравилась статья? Подпишись на обновления по RSS/E-mail

Подписаться, не оставляя комментарий

Все комментарии (3) к “Управление изменениями на примере WordPress” RSS

  1. FLamY

    Отличная статья. :) ) Можно ее на сайт запостить? С ссылкой на оригинал, естесственно.

  2. yuliya

    FlamY: да, пожалуйста.

  3. Лемони Сникет

    Прочитал. Но ничерта не понял. НЕ разработчик я. Но про технологию слышал. Наверное надо более облегченный вариант статьи почитать.

Архив

Добавить статью

Станьте автором нашего сайта!

Какие материалы подходят для публикации? — Такие.

Присылайте статьи на editors@developers.org.ua.

Подробнее.

Популярные теги

Все теги

Комментарии

Последние комментарии

интернет магазин бытовая техника магазин Laptoper