Практически все VCS поддерживают ветвления, которые вы можете использовать для «ароматизации» вашего продукта. Но будьте осторожны, многое зависит от того, как вы реализуете изменения на уровне файлов. Лично я бы не использовал VCS для ароматизаторов. Конфигурация на уровне приложения или сборки в основном проще поддерживать.
Но вот два примера того, как все может получиться.
Пример для легкой ароматизации:
branch-full
- module 1
- module 2
- module 3
- module 4
- documentation-full
branch-lite
- module 1
- module 2
- purchase-module
- documentation-lite
То, что вы отправляете в этом случае, в основном определяется на уровне каталогов. Ни один модуль не изменен, а только добавлен или удален. Эти два списка могут быть легко сохранены в файле сборки, возможно, вообще не требуя VCS, но это другая история.
Пример сложного ароматизации (анти-паттерн) (один исходный файл в ветке lite)
my generic code ...
...
...
my lite-specific code ...
...
...
my generic code ...
...
...
Если вы столкнулись с ошибкой в ОБЩЕМ коде, но только внутри вашей lite-ветви (поскольку ошибка может быть как-то связана с вашей lite-функциональностью), вам придется исправить и зафиксировать ее в lite-ветви. Вам нужно будет либо объединить (и сделать совместимым с полной версией) свое единственное исправление, либо вообще не сливать его с полной версией. Более поздняя опция со временем увеличивает «разрыв» между вашей облегченной и полной версией, что, в свою очередь, затрудняет получение обновлений от «полной версии» в случае более крупных разработок на этой стороне.
C