Хотя теоретически возможно поддерживать отклонения клиентов в специализированных филиалах, как предлагает @VonC, я осмелюсь сказать, что это технически очень сложно и не масштабируется.
Да, у вас могут быть рабочие места (в Jenkinsили что-то в этом роде), которое автоматически отклонит ваши отклонения от основной ветви, но когда дело доходит до инструментов, вы сами по себе.Как минимум, будьте готовы к таким ситуациям, как:
- rebase будет терпеть неудачу с конфликтами - легко, git сообщит вам
- rebase удастся, но результат будет содержать логические конфликты - это требует хорошего тестового покрытия, потому что ни один инструмент не сможет предупредить вас
Вместо этого я рекомендую минимизировать отклонения и после этого держите их все в одной ветке рядом друг с другом.
Это обычно возможно, если ваш проект состоит из модулей.Вы не упомянули какие-либо подробности вашего проекта, но большинство языков поддерживают некоторую форму модульности, поэтому я надеюсь, что это также ваш случай.
Таким образом, вы можете попытаться сконцентрировать точки расширения для отклонений вминимальные модули (в идеале один) и имеют несколько вариантов этих модулей в проекте.
Преимущества очевидны:
- это просто
- ваш CI являетсяпростота настройки для одновременной сборки всех модулей (= отклонения от клиентов)
- вы можете запускать на них тесты и легко выбирать, какой тест предназначен для одного клиента, какой является общим, а какой является специфическим для отклоняющейся функции.Кроме клиента
- , вам не нужно блокировать свою модель ветвления из-за этого, и вы все равно можете использовать git-flow или что-то еще, что соответствует вашим потребностям
Единственный недостаток -когда вы выпускаете свой проект только для одного клиента (с пометками и другими церемониями), вы делаете это также для всех остальных.Обычно это не имеет большого значения, и, с другой стороны, оно мотивирует сделать отклонения характерными, что хорошо.
Чтобы свести к минимуму отклонения, я рекомендую следующие методы:
- некоторые отклонения могут быть лучше представлены параметрами конфигурации
- другие могут быть скорее специфичными для функций, чем специфичными для клиента
- и самое лучшее, некоторые отклонения могут быть отклонены - хотя это редко возможно
Просто подвести итог - свести к минимуму отклонения и строить их все рядом .
Распределение вашей кодовой базы по нескольким основным ветвям (для каждого клиента) быстро станет невозможным.