Мы разрабатываем фреймворк, который в основном состоит из следующих компонентов:
web/
web/vendor/
test/
test/vendor/
tools/
tools/vendor/
web
является основной базой кодовой базы. Другие имена dir говорят сами за себя (надеюсь).
На данный момент у нас есть 3 хранилища для web
, test
, tools
, с vendor
компонентами, заполненными до фиксации.
Кроме того, мы создаем отдельное приложение, которому необходимо добавить код в компоненты, упомянутые выше. Структура приложения:
web/
web/framework/
web/...
test/
test/framework/
test/...
tools/
tools/framework/
tools/...
Таким образом, 3 репозитория, составляющих каркас (web
, test
, tools
), клонируются в web/framework
, test/framework
, tools/framework
как суб-репозитории репозитория приложения /
. Добавление приложения добавляется как другие подкаталоги каталогов web
, tools
, test
.
Эта настройка имеет смысл для разделения трех компонентов. Но это также означает, что 3 репозитория можно легко потерять синхронизацию.
Чего мы хотели бы добиться, так это иметь 1 репозиторий фреймворка и один репозиторий приложений с фреймворком в качестве под репозитория. Однако, поскольку наша система управления версиями (Mercurial) не поддерживает разбиение под-репозитория на несколько точек монтирования, это приведет к такой структуре:
framework/web
framework/tools
framework/test
app/web
app/tools
app/test
Что бы иметь смысл для пользователя (с точки зрения юзабилити), вероятно, нужно как-то запустить загрузку web
, tools
, test
, чтобы пользователю не нужно было искать кучу папок для некоторых инструмент или тест.
Еще одним недостатком является то, что для живых систем мы предпочитаем развертывать только web
и tools
, сохраняя управление версиями (наше приложение интерпретируется как PHP), чтобы мы могли быстро обновлять код на лету ( просто запустите hg update
), но пропустите test
, так как это редко, если вообще используется на рабочем сервере.
Итак, большой вопрос:
Как мы можем реструктурировать настройку проектов так, чтобы мы не делали ничего хорошего в обоих мирах: иметь 1 фреймворк для репозиториев вместо 3, но при этом иметь управляемую структуру tools
, т. Е. И иметь возможность развертывания в режиме реального времени как клон репо, без предварительной сборки шаг.