Управление версиями и выпусками с несколькими продуктами с общей кодовой базой

В настоящее время я пытаюсь выяснить, как управлять выпусками с помощью git flow в сценарии, в котором у меня есть один репозиторий git с примерно 15 проектами в двух решениях плюс сценарии для базы данных.

Каждое решение в основном содержит один проект, результатом которого будет исполняемый файл, и более 10 проектов, содержащих базовые функции, используемые обоими решениями, такими как DAL, оболочка доступа SAP и т. Д.
Первое решение - это приложение с пользовательским интерфейсом для пользователей.
Решение two - это служба Windows.
Выпуск двух решений и база данных не синхронизированы. Это означает, что часто выпускается только одна руда из трех. Это приводит к разным номерам версий. Например, UI выпускается довольно часто, сервис выпускается редко. База данных где-то посередине. Итак, UI может иметь версию 2.1.15, сервис 2.1.1 и базу данных 2.1.5.

Что теперь делать с общими проектами? Должны ли они использовать номер версии пользовательского интерфейса или службы?
Как я могу учесть тот факт, что изменение в одном из общих проектов не приведет к автоматическому запуску выпуска обоих решений? Это означает, что одновременно производственная среда содержит две разные версии одних и тех же проектов. Это как-то нужно отразить в репозитории.

Я немного заблудился здесь, любые советы, опыт и т. Д. Были бы признательны.
Я могу структурировать репозиторий и базу кода любым способом, и я могу создать дополнительные репозитории, если это поможет.


person Daniel Hilgarth    schedule 15.01.2013    source источник
comment
git - это не система управления пакетами, а система контроля версий. Понимание того, что VCS не следует использовать в качестве инструмента распространения, является первым шагом к надежным выпускам.   -  person William Pursell    schedule 15.01.2013
comment
@WilliamPursell: Я не понимаю, как это отвечает на мой вопрос. Я не хочу ничего распространять с помощью git.   -  person Daniel Hilgarth    schedule 15.01.2013
comment
Это не отвечает на ваш вопрос. Это комментарий.   -  person William Pursell    schedule 15.01.2013
comment
@WilliamPursell: Тот, который не имеет отношения к вопросу. Что вы пытаетесь мне здесь сказать?   -  person Daniel Hilgarth    schedule 15.01.2013
comment
Я предполагаю, что, когда выпуски в вашей производственной среде не синхронизированы с тем, где вы их хотите, у вас возникнет проблема с распространением. Такую проблему лучше всего решить с помощью системы управления пакетами, а не системы контроля версий.   -  person William Pursell    schedule 15.01.2013
comment
@WilliamPursell: Но это не так. Пожалуйста, попробуйте перечитать вопрос. Если все еще непонятно, скажите, пожалуйста, и я постараюсь это исправить.   -  person Daniel Hilgarth    schedule 15.01.2013


Ответы (1)


Во-первых, если у вас разные (хотя и несколько зависимые) проекты, которые достаточно разные, чтобы иметь разные версии, то непременно поместите их в разные репозитории git.

Если у вас все ваши продукты в одном репозитории, вы просто неэффективны. Например, если вы работаете над пользовательским интерфейсом, а другой работает над службой и внес небольшое исправление в пользовательский интерфейс, то, когда вы объединяете свою работу с ними, вы также получаете их изменение службы (что вам было все равно. за).

Из ваших 15 проектов, если некоторые из них слишком тесно связаны, вы можете сохранить их в одном репозитории (например, компоненты пользовательского интерфейса).

Теперь, когда у вас есть разные репозитории, вы можете легко управлять отдельными выпусками для них и отдельными номерами версий.

Однако вы должны быть осторожны с совместимостью. Например, ваш пользовательский интерфейс с версией 2.4.5 может быть совместим с сервисом с версией в диапазоне 2.1.7-2.2.9, и аналогично, сервис с версией 2.1.10 может быть совместим с пользовательским интерфейсом с версией в диапазоне 2.4. .3-2.4.8. Каждая версия ваших программных компонентов должна иметь возможность проверять версию других компонентов на совместимость.

person Shahbaz    schedule 15.01.2013
comment
Спасибо за Ваш ответ. Я хочу отметить, что оба продукта зависят от других проектов по большей части своей функциональности, например DAL или уровень домена. Размещение каждого из этих проектов в собственном репозитории нецелесообразно ... - person Daniel Hilgarth; 15.01.2013
comment
@DanielHilgarth, я понятия не имею, что такое DAL или SAP, но я почти уверен, что пользовательский интерфейс использует базу данных и службу, но не наоборот. Так что UI сам по себе может быть репозиторием. Точно так же БД и служба, даже если они используют друг друга, логически разделены (и я надеюсь, что ваш код это отражает). Подумайте, например, о GIMP, он использует gtk, который использует gdk, который использует glib. Практически они никогда не используются друг без друга, а помещены в 4 разных репозитория. - person Shahbaz; 15.01.2013
comment
В вашем вопросе у вас явно есть 3 разных объекта с 3 разными версиями. Для меня это кричит о 3 разных репозиториях. - person Shahbaz; 15.01.2013
comment
Я могу согласиться с тем, что у меня есть один репозиторий для пользовательского интерфейса, один для службы и один для БД. Здесь нет проблем. Но и служба, и пользовательский интерфейс используют уровень доступа к данным (DAL) и оболочку SAP, которая оба определены в их собственных проектах. Куда их ставить? Как их версировать? Пользовательский интерфейс вообще не использует сервис, они не знают друг друга. - person Daniel Hilgarth; 15.01.2013
comment
Спасибо, выглядит многообещающе. Мне нужно подробно проверить, имеет ли это смысл в моем сценарии. - person Daniel Hilgarth; 15.01.2013