Контроль версий системы управления контентом? - PullRequest
3 голосов
/ 13 апреля 2010

У меня есть следующая структура каталогов в приложении CMS, которое мы написали:

/application
/modules
   /cms
      /filemanager
      /block
      /pages
      /sitemap
   /youtube
   /rss
/skin
   /backend
      /default
         /css
         /js
         /images
   /frontend
     /default
         /css
         /js
         /images

Приложение содержит код, специфичный для текущей реализации CMS, т.е. код для этого конкретного cms. Модули содержат многократно используемые фрагменты кода, которыми мы делимся между проектами, например библиотеки для работы с лентами YouTube или RSS. Мы включили их как подмодули git, чтобы мы могли обновить модуль на любом веб-сайте и перенести изменения во все другие проекты. Это позволяет легко применить изменения в нашем коде и распространять их. Мы хотели превратить CMS в модуль, чтобы получить то же преимущество - мы можем запустить весь проект под управлением исходного кода, а затем обновить cms по мере необходимости через подмодуль git. Однако мы столкнулись с проблемой: для правильной работы cms требуется javascript / images / css.

Вещи, о которых мы думали:

  • Мы могли бы создать 2 подмодуля, один для обложки cms и один для cms, но это означает, что вы не можете «git pull» одну версию, не имея представления о том, какие версии скина работают с какими версиями cms. то есть версия 1.2.2 CMS может иметь проблемы с 1.0.3 CMS-Skin

  • Мы могли бы добавить скин к модулю cms, но это имеет следующие проблемы:

    1. Скин должен быть доступен в корне документа, код модуля не должен быть, и если это так, его, вероятно, следует защитить с помощью .htaccess
    2. Кажется, что нет смысла связывать активы с php кодом
    3. Мы могли бы создать символическую ссылку между / skin / backend / для перехода на / modules / cms / skin, но это вызывает какие-то проблемы с безопасностью, и мы хотим, чтобы что-то вроде символической ссылки для приложения работало?
    4. Мы могли бы создать ловушку для git или сценарий оболочки, который копирует файлы из модулей / cms / skin в skin / backend при обновлении, но это означает, что мы теряем возможность редактировать основные файлы CMS в проекте, а затем отправлять их назад

Как это обычно делается в крупномасштабных смс? Как можно получить исходный код для cms под управлением версией, поработать над приложением для клиента, а затем обновить исходный код в виде выпусков, предоставленных поставщиком? Как такие приложения, как Magento или Drupal, делают это?

1 Ответ

2 голосов
/ 13 апреля 2010

Я не знаком с проектами CMS, но не могли бы вы:

  • создать 2 подмодуля, один для cms-skin и один для cms
  • использовать cms-скин как вложенный подмодуль в cms

cms будет «основным проектом» для cms-skin, то есть каждый раз, когда вы делаете коммит, вы сначала делаете коммит-скин, а «cms commit» запускает точную ссылку SHA1 на используемый скин во время коммита.

Таким образом, вы можете тянуть только cms, и с ним придет точная версия cms-скина, которая вам нужна.

Подробнее, см. SO ответ об истинной природе подмодулей.

...