Ломаю голову как лучше организовать структуру проекта.
Пишется:
1. Фреймворк с некой структурой папок.
2. CMS на базе этого фреймворка.
Структура папок в фреймворке следующая:
common - общие для системы ресурсы (JS, CSS фреймворки)
files - файлы сохраняемые в системе пользователем (uploads)
html - верстка
inc - основная папка системы
app - классы специфичные для приложения (пустая)
ctrl - контроллеры (пустая)
lib - библиотека базовых классов фреймворка
test - тесты
tmpl - шаблоны (есть папка default от фреймворка, остальное в .gitignore)
tmp - временные файлы
Предполагается что и фреймворк, и CMS могут иметь свои файлы в папках common, inc/tmpl, inc/test
Сама CMS живет в inc/app и inc/ctrl. Кастомизация CMS под проект меняет файлы в inc/app, inc/ctrl, html
Вся структура папок уже задана в фреймворке, соотв. CMS надо мягко «наложить» поверх этого.
Хочется вести весь проект в системе контроля версий (СКВ), сейчас это GIT. А в идеале и кастомизацию CMS под конкретный проект также заводить в СКВ, чтобы прозрачно обновлять и фреймворк, и CMS.
Насколько я понимаю механизм externals, можно подключить внешний репозиторий в отдельную папочку и он там будет обновляться, а для CMS нужно внедрение в дерево на нескольких уровнях.
Вариант как сделано в symfony — репозиторий лежит где-то в дебрях, а потом разворачивается запуском скрипта и создает нужную структуру папок мне как-то не очень нравится.
В принципе можно положить два репозитория рядом, а потом их сливать скриптами, но может есть какие-то нормальные варианты? Нельзя ли как-то извернуться с ветками?
UPD: Поразмыслил над ветками, наверное это действительно оптимальный вариант, но есть еще одна сложность. Я хочу чтобы репозиторий с фреймворком и CMS был открытым, а клиентские проекты уже не были доступны широкой публике.
Может быть еще с какими-то проблемами можно столкнуться при ведении кучи веток?