2015-11-09 2 views
2

В настоящее время у нас есть одна главная главная ветвь для нашего PHP-приложения в общем хранилище. У нас более 500 клиентов, которые подписывают наше программное обеспечение. Для разных целей большинство из них имеют некоторую настройку в своем проекте. Настройка может осуществляться только из текстового поля, до абсолютно новой функции и модуля или новой таблицы/столбца в базе данных.

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

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

Поддержание сотен настраиваемых ветвей над главной ветвью

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

+1

Вы бедны, бедны душой .. – d0nut

+0

cross post [на программистах] (http://programmers.stackexchange.com/questions/302147/maintain-hundreds-of-customized-branches-over-master-branch) – ren

ответ

2

Не думаю, что есть быстрый и легкий ответ на этот вопрос. Тот факт, что в вашем продукте разрешено так много настроек, в основном означает, что у вас есть 500 отдельных продуктов.

На мой взгляд, первым шагом было бы отделить основной продукт от всех настроек. Затем создайте отдельный репозиторий, в котором вы будете хранить все ваши ветви клиента и обрабатывать основной продукт как зависимость. Вы могли бы сделать это с помощью git-подмодуля или с каким-то пакетом решений для зависимостей.

Таким образом, каждый клиент зависит от конкретной версии вашего основного продукта, и вы можете контролировать, когда определенный клиент получает обновление до более новой версии.

Конечно, это означает, что основной продукт должен поддерживать некоторые формы переключателей функций и/или переопределения модулей, которые позволяют выполнять настройку.

Смежные вопросы