Xpoint
   [напомнить пароль]

Как организовать правильное управление файлами в сложных проектах?

Метки: [без меток]
2007-08-21 20:20:38 [обр] VLAD(0/5)[досье]

Проблема управления и контроля файлов в сложном проекте возникает, рано или поздно, у всех. Особенно когда много проектов реализованы на одном движке с модификациями для каждого проекта и всё это размещено на одном development-сервере и синхронизируется на production-сервер.
<habracut>
Я, в основном, использую CMS Drupal в работе, но данная проблема применима к любой сложной CMS.

Последние несколько дней пытаюсь реализовать задуманное при помощи SVN. Примерная и желаемая структура хранилищ приведена на картинке.

Условия: необходимо вынести оригинальный код Друпала в отдельную ветку (ветка - это условно, можно сделать отдельный репозитарий или branch); назовём её drupal/original.
Также необходимо как-то отделить собственные изменения в ядре Друпала (да, не всё можно сделать при помощи модулей, приходится и ядро ковырять) в отдельную ветку; назовём её drupal/modified.
Как обычно, надо иметь branches, tags и trunk.

Аналогичную структуру имеют и модули: cck/original/trunk - последняя оригинальная версия от разработчиков модуля, cck/modified/trunk - последняя моя версия.

Собственно, в ветках drupal и modules хранятся изменения применительные ко всем разрабатываемым сайтам.

А вот в ветках site1 (условно), site2 и т.д. должны храниться рабочие копии с правками для каждого конкретного сайта. Причём часть файлов берётся из drupal/modified/trunk, часть - из modules/<модуль>/modified/trunk, а ещё часть - свои локально-изменённые файлы. (тот же settings.php или модули, написанные для этого конкретного сайта и больше нигде не используемые)

На этом этапе и возникли проблемы: как поместить в хранилище для конкретного сайта все файлы? Каталоги можно "прилинковать" свойством svn:externals, а файлы - нельзя.

Приглашаю всех обсудить данную тему и использование VCS в составных проектах вообще :-)

спустя 7 дней [обр] vandy(0/2)[досье]
А как вы при таком расположении branches, tags и trunk создаете новые ветки или, например, помечаете, что это релиз какого-то сайта?
Или у вас один сайт и вам важно следить за версиями модулей для него?
спустя 1 месяц 19 дней [обр] alan[досье]

Может кто подскажет как решить похожую проблему.
В trunk располагается сторонний проект, а в branches располагается копия , над которой веду разработку.

Как правильно обновить в trunk новую версию, учитывая что часть файлов в новой версии были удалены, а часть добавлены.
С добавленными понятно, svn add.

А как тогда избавиться от удаленных файлов?
Вручную маркировать совсем нет желания.

спустя 31 минуту [обр] VLAD(0/5)[досье]
svn rm ? Если вы это имеете в виду
спустя 17 часов [обр] alan[досье]

К примеру, на svn сервере в trunk лежит drupal 4.0, вышел новый 5.0 в котором в сравнении с 4.0 появились новые файлы, а часть файлов уже отсутсвует.

Если в локальную рабочую копию trunk с drupal 4.0 распаковать 5.0 и выполнить add и commit, то соот. в trunk останутся файлы от 4.0 . Потом придется вручную удалять файлы из 4.0.

Можно ли как-нибуть избавиться от файлов 4.0 более быстро, чем вручную сравнивать 4.0 и 5.0 и удалять ненужные файлы.
Или может быть есть более правильный способ обновить drupal в trunk с 4.0 до 5.0

спустя 32 минуты [обр] VLAD(0/5)[досье]
Для себя я эту проблему решил так:
  • Использую Git вместо SVN, в нём есть возможность делать клоны репозитариев (git clone), при этом тот, от кого создан клон, остаётся предком для нового репозитария и при коммите (git commit) в предке, изменения проходят и в клон (в нём надо сделать git pull = svn up)
  • Сделал 2 ветки: drupal/original и её клон drupal/modified (по сути, это аналог trunk'а)
  • Соответственно, в drupal/original хранятся ТОЛЬКО официальные версии, а в drupal/modified - мои с учётом исправлений, текущие версии
  • При выходе нового релиза drupal'а я просто удаляю всё из drupal/original (кроме файлой git'а, это один каталог верхнего уровня .git) и кладу в него новый релиз
  • Через git-status (список изменённых файлов) и git-diff смотрю изменения и коммичу это обновление
  • В drupal/modified делаю git-pull, если есть конфликты с моими изменениями - устраняю
  • Всё :)
Powered by POEM™ Engine Copyright © 2002-2005