Как правильно поддерживать проект, который соответствует двум версиям платформы? - PullRequest
1 голос
/ 16 января 2012

Предположим, у меня есть проект, реализованный на определенном языке программирования, использование которого разбито на две (или более) версии по любой причине.

Эти две версии предоставляют разные механизмы для реализации некоторых функций проекта. Таким образом, один и тот же код не переносится между версиями.

Как организовать эту ситуацию в git-репозитории? Тем не менее, сохранить каталоги для конкретных версий в ветке? Дублирует ветки в одном репозитории? Или использовать разные репозитории для каждой версии?

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Это немного зависит от языка программирования, но если различие между двумя версиями приводит к существенному различию в вашем коде, то я бы хотел:

  1. определяет интерфейс, представляющий функциональность, реализация которой должна отличаться.
  2. написать две реализации этого интерфейса.
  3. выберите правильный вариант во время сборки или выполнения, в зависимости от языка и проекта.

После того, как вы разделили две разные реализации, вы можете сохранить их в одной и той же ветке, точно так же, как вы бы сохранили любые две разные реализации одного и того же интерфейса в ветке.

Для тривиального различия, например, если все, что вам нужно, это передать немного разные флаги какой-то функции, то я бы, вероятно, не пошел на все эти неприятности. Вместо этого я бы просто сделал эквивалент:

#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, а не явно кодировать, что это зависит от конкретной версии платформы. Затем ваша конфигурация зависит от того, какие платформы поддерживают какие функции.

1 голос
/ 16 января 2012

Вы можете достичь этого с помощью веток. Во время слияния необходимо определить, что может и не может измениться между ними.

git merge --no-commit

выполнит слияние, но не сделает последний шаг фиксации. Это позволяет вам выяснить, работает ли решение до сих пор. Как только у вас все получится, завершите слияние с помощью

git merge

там должно быть сообщение по умолчанию. Вы можете оставить все как есть или добавить больше информации о том, что вы сделали, чтобы эта конкретная версия работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...