# Обновление тиражных решений с сохранением доработок ###### tags: `Инструкция` `Маркетплейс` Используем `git` для слияния изменений из чужих обновлений вне контроля версий с нашими доработками. В отличие от обычного подхода к доработкам шаблонов битрикс, с такой схемой вместо копирования шаблона сайта или компонентов перед изменением, лучше **менять исходные**. [TOC] ## Подготовка репозитория В репозиторий обязательно должны быть добавлены: * Шаблон сайта (`/bitrix/templates/citrus_developer`) * Файлы публичной части сайта (все папки от корня, за исключением `/bitrix` и `/upload`) Можно вносить изменения даже в `/bitrix/components/citrus*` и `/bitrix/modules/citrus*`, для этого их также нужно добавить в репозиторий. **Для работы будет использоваться две ветки:** * `master` — текущая версия решения *с внесенными доработками*. Все изменения на сайте вносятся в эту ветку. * `original` — текущая версия решения *в типовом варианте без доработок*. Используется только для установки обновлений. Дальше могут быть варианты. ```flow st=>start: Подготовка репозитория e=>end: Установка готова к обновлениям no_customizations=>subroutine: Нет доработок:>#Нет-доработок has_customizations=>subroutine: Решение доработано:>#Решение-доработано-изменен-шаблон-публичка cond=>condition: Уже есть доработки? st->cond cond(yes)->has_customizations cond(no)->no_customizations no_customizations->e has_customizations->e ``` ### Нет доработок в ветке `master`: 1. Коммитим все изменения 2. Из ветки `master` создаём ветку `original` 3. Переключаеся обратно в `master` ### Решение доработано (изменен шаблон, публичка) :::warning :zap: Перед началом **важно убедиться, что решение не обновлялось без запуска мастера** для обновления публичной части и шаблона сайта. Т.е. решение или не обновлялось вовсе или обновлялось с запуском [мастера настройки решения](https://citrus-soft.ru/docs/course/?COURSE_ID=1&LESSON_ID=53). В противном случае на шаге (6) придется отделять внесенные доработки от отличий, появившихся в результате того что публичная часть и шаблон были от устаревшей версии решения. ::: в ветке `master`: 1. Коммитим все изменения 2. Удаляем все папки и файлы шаблона и публичной части (кроме папок `/bitrix`, `/upload`, `/local`, файлов `/.htaccess`, `/.gitignore`) > Если изменения также вносились в компоненты и шаблоны компонентов решения в `/bitrix/components/citrus*`, необходимо переустановить модули решения чтобы вернуть их в первоначальное состояние 3. Запускаем [мастер настройки решения](https://citrus-soft.ru/docs/course/?COURSE_ID=1&LESSON_ID=53) чтобы получить *типовой вариант* без доработок 4. Коммитим изменения 5. Создаем из `master` ветку `original` 6. Возвращаемся в `master`, откатываем изменения которые вносились при возврате на *типовой вариант* решения (на шаге 4): ``` git revert --no-commit HEAD ``` 7. Проверяем и коммитим эти изменения отдельно - это и будут все изменения, внесенные в *типовой вариант* ## Процесс обновления 1. Перед обновлением переключаемся в ветку `original`, все обновления решения производятся в ней. 2. Устанавливаем обновления модуля 3. Запускаем мастер настройки с перезаписью шаблона, публичной части и настроек инфоблока 4. Коммитим изменения, полученные с обновлением 5. Переключаемся в `master` 6. Сливаем изменения из `original` в `master` (`git merge original`) * При этом необходимо разрешить конфликты слияния, если они возникли * Вручную проверить все изменения, которые пришли с обновлением на предмет пересечения с теми доработками, которые вносились в *типовой вариант* 8. Обновляем кастомные цветовые схемы: ```php <?php use \Bitrix\Main\Loader; use \Citrus\Developer\ThemeBuilder; if (Loader::includeModule('citrus.developer')) { ThemeBuilder::setSkipSvg(true); // не пересобирать картинки логотипа и метки на карте ThemeBuilder::rebuildAll(); } else { die('Missing citrus.developer module'); } ``` Готово, мы получили обновленную версию решения с сохранением всех доработок.