Золотая середина между подмодулями и ветвями?
-
06-09-2019 - |
Вопрос
Я только что создал ветки тем для незавершенных функций моего проекта, управляемых Git.Все они настолько самодостаточны, что одна тематическая ветка не связана напрямую с другой тематической веткой.Однако все ветки имеют общую основу: главная ветка является ядром системы, а тематические ветки просто расширяют возможности основной ветки.
Если я правильно понял, если я делаю что-то в основной ветке, что влияет (м) на любые тематические ветки (скажем, изменяю API, используемый для связи между ядром и отдельными функциями), это изменение не распространяется на тематические ветки. автоматически, чтобы ветки можно было соответствующим образом зафиксировать.Изменения необходимо будет вручную объединить или выбрать в другие ветки.
Я понимаю, что использование подмодулей позволит добиться этого.Однако подмодули приводят к слишком сильному разделению основного проекта и будущих функциональных проектов, главным образом потому, что эти функции не являются самоподдерживающимися.Они полагаются на ядро.
Итак, я ищу какой-то способ сказать, что определенные файлы/каталоги уникальны для определенной ветки, а все остальное происходит из основной ветки.Не имея лучшей аналогии, говоря в терминах Photoshop, я хочу владелец быть фоновым слоем, и каждая ветвь темы будет представлять собой частично прозрачный слой изображения поверх него с уникальным содержимым.
Решение
Это понятие «композиция» или «наследование конфигурации» не поддерживается в Git, как объяснено в вопросе «Гибкое и статическое ветвление".Только слияния позволяют вам «составить» именно тот набор файлов, который вам нужен.
Функция подмодуля поможет вам идентифицировать согласованный набор файлов, который должен иметь свой собственный жизненный цикл и помечаться в своем темпе.Это не относится к вашим особенностям.
Ваш подход должен оставаться "системный«один, где вы разрабатываете, маркируете и объединяете всю систему.Если что-то развивается в основной ветке, это необходимо объединить с ветвями функций.
Если функции включают в себя набор файлов, отличный от тех, которые были изменены в основной ветке, такое слияние будет тривиальным.Если нет, вы можете следовать предложение Матеуши, используя промежуточную ветвь для разрешения конфликтов и оценки результата такого слияния, сохраняя при этом функциональную ветвь нетронутой.
Другие советы
Допустим, у вас есть мастер ветвей и несколько ветвей:особенность1, особенность2, особенность3...
$ git checkout feature1
$ git branch master-with-feature1
$ git checkout master-with-feature1
$ git merge master
Каждый раз, когда вы вносите какие-либо изменения в владелец или функция1 вы можете оформить заказ на мастер-с-функцией1 и объединить их.