Как правильно настроить управление кодом / управление версиями для платформы и производного продукта - PullRequest
0 голосов
/ 10 июля 2019

Мы разрабатываем фреймворк, который в основном состоит из следующих компонентов:

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, т. Е. И иметь возможность развертывания в режиме реального времени как клон репо, без предварительной сборки шаг.

...