Структура проекта для продукта с разными версиями

#svn #version-control

#svn #контроль версий

Вопрос:

мы хотим разработать продукт и доставить его нескольким клиентам. Теперь у нас есть случай, когда какой-то клиент хочет иметь дополнительную функцию x, а другой клиент хочет иметь функцию y. Некоторые функции также требуют некоторых изменений в программной архитектуре продукта.

И все клиенты, конечно, хотят воспользоваться официальными функциями, определенными всеми клиентами.

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

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

Спасибо за вашу помощь

Ответ №1:

Это большая, сложная тема — у Мартина Фаулера есть отличная статья о ветвлении функций (http://martinfowler.com/bliki/FeatureBranch.html ); есть также ветвление по абстракции (http://continuousdelivery.com/2011/05/make-large-scale-changes-incrementally-with-branch-by-abstraction/).

Большой риск заключается в том, что вы в конечном итоге используете SVN в качестве дублера для «правильной» архитектуры. Если вам нужно поддерживать несколько функций таким образом, вам, вероятно, следует разработать решение для поддержки этого во время выполнения (через настройку) или во время сборки (через настройку); обычный способ сделать это — использовать плагины.

Использование вашей системы управления исходным кодом для «слияния» функций превращает процесс слияния в непредсказуемый, нестабильный беспорядок — тот факт, что вы можете объединить код из другой ветки, не означает, что все это будет иметь смысл — и разработчики, работающие над разными функциями / ветками, могут дублировать работу друг другаили принятие взаимоисключающих решений по дизайну.