---
# System prepended metadata

title: Обновление тиражных решений с сохранением доработок
tags: [Инструкция, Маркетплейс]

---

# Обновление тиражных решений с сохранением доработок

###### 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');
    }
    ```


Готово, мы получили обновленную версию решения с сохранением всех доработок.

