owned this note
owned this note
Published
Linked with GitHub
# Обновление тиражных решений с сохранением доработок
###### 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');
}
```
Готово, мы получили обновленную версию решения с сохранением всех доработок.