У меня есть продукт двух типов с 80% базовым кодом (Community Edition и Enterprise Edition). Я немного разбираюсь в git-flow
, и мне он нравится, но я не знаю, как это сделать.
Некоторые функции Enterprise Edition
не должны быть включены в Community Edition
, а также некоторые многоязычные файлы не должны включаться в Community Edition
.
master
|
/ \
/ \
CE EE
| |
tag tag
Что я должен делать? Как управлять веткой репозитория с такой структурой?
@ LasseVågsætherKarlsen В большинстве случаев они похожи. В некоторых функциях даже нет файлов, таких как многоязычные, а в некоторых функциях есть комментарии к коду. Конечно, может быть, в 2% кода есть конфликт между CE и EE.
Я бы не стал решать эту проблему в SCM. Я бы выделил общее поведение в отдельный проект / модуль (в его собственном репозитории SCM), который наследуется либо «Редакцией».
Я согласен с @TimothyTruckle, это не подходит для SCM, это следует обрабатывать в коде или во время выполнения или, может быть, даже раньше в сборке.
@TimothyTruckle @phoet @ LasseVågsætherKarlsen Могу ли я рассматривать Enterpise Edition
как главную и создавать новую ветку из мастера как CE и удалять дополнительные функции в этой ветке?
Вам нужно будет определить, хотите ли вы, чтобы ваш клиент видел код Community Edition
или нет.
Если нет, что означает, что вы поставляете скомпилированный продукт программного обеспечения, я бы порекомендовал основную ветку со всем, что в ней, и некоторыми параметрами компиляции, чтобы включить или отключить функцию.
Если да, то если это какой-то открытый или интерпретируемый код, я бы порекомендовал git submodule
с общей частью и двумя репозиториями для Enterprise Edition
и Community Edition
.
Содержит ли корпоративная версия все, что есть в версии для сообщества (а не только каждую функцию, каждое изменение, строку кода и т. д., Если она явно не изменена для предприятия)? Или некоторые части сильно отличаются?