Это немного зависит от языка программирования, но если различие между двумя версиями приводит к существенному различию в вашем коде, то я бы хотел:
- определяет интерфейс, представляющий функциональность, реализация которой должна отличаться.
- написать две реализации этого интерфейса.
- выберите правильный вариант во время сборки или выполнения, в зависимости от языка и проекта.
После того, как вы разделили две разные реализации, вы можете сохранить их в одной и той же ветке, точно так же, как вы бы сохранили любые две разные реализации одного и того же интерфейса в ветке.
Для тривиального различия, например, если все, что вам нужно, это передать немного разные флаги какой-то функции, то я бы, вероятно, не пошел на все эти неприятности. Вместо этого я бы просто сделал эквивалент:
#if NEW_PLATFORM
// enable useful new flag 2
#define FLAGS 0x11
#elif OLD_PLATFORM
// we can live without flag 2 if it's not supported
#define FLAGS 0x1
#else
#error what platform even is this?
#endif
Но будьте осторожны, незначительные различия могут возрасти по мере развития кода, и вы получите беспорядок кода для обнаружения платформы. Вы должны стремиться протестировать платформу в не более в одном месте, или, что еще лучше, просто контролировать все это с помощью опции сборки. В приведенном выше случае вы могли бы назвать это USE_USEFUL_NEW_FLAG
, а не явно кодировать, что это зависит от конкретной версии платформы. Затем ваша конфигурация зависит от того, какие платформы поддерживают какие функции.