Интеграция Git с 1С-Битрикс — это стандарт современной веб-разработки, который разделяет программный код (версионируемые файлы) и контент (базу данных). Такой подход исключает конфликты при обновлении ядра, позволяет безопасно работать в команде и защищает боевой сервер от случайных ошибок, типичных для правки файлов напрямую через FTP.
Почему «по старинке» больше не работает
Давайте честно: все мы когда-то правили init.php прямо на боевом сервере в пятницу вечером через встроенный редактор админки или FileZilla. И у всех, абсолютно у всех, хоть раз после этого сайт ложился с белым экраном. 1С-Битрикс — система специфическая. Исторически она хранит половину логики в файлах, а половину — в базе данных. Это создает адский коктейль для системы контроля версий.
Если вы попытаетесь просто сделать git init в корне сайта и залить всё на GitHub, вы получите репозиторий на гигабайты, который невозможно обновлять. Ядро обновляется через админку, перезаписывает файлы, Git сходит с ума, возникают конфликты. Моя задача — показать вам архитектуру, которая выдерживает проверку временем и нервами разработчиков.
Архитектура папок: разделяй и властвуй
Первое правило бойцовского клуба Битрикс-разработчиков: не трогай папку /bitrix. Начиная с последних версий ядра (D7 и новее), вся кастомизация должна жить в специальной директории.
Переезд в /local
Если у вас шаблоны сайта всё еще лежат в /bitrix/templates/, вы живете в прошлом. Создавайте в корне папку /local. Это ваша песочница. Всё, что лежит здесь, Git должен отслеживать. Всё, что в /bitrix — это зона ответственности вендора (1С-Битрикс), и нам там делать нечего, кроме конфигов.
| Директория | Что храним | Статус в Git |
|---|---|---|
/local/templates |
Шаблоны сайта | Tracked (Следим) |
/local/php_interface |
События, константы, функции | Tracked (Следим) |
/bitrix/* |
Ядро системы, стандартные компоненты | Ignored (Игнорируем) |
/upload |
Картинки и файлы пользователей | Ignored (Игнорируем) |
Настройка .gitignore — фундамент спокойствия
Самая частая ошибка — пушить лишнее. Кеш, логи, временные файлы восстановления. Если эти файлы попадут в репозиторий, при каждом мерже вы будете разгребать конфликты. Ниже — проверенный годами конфиг, который отсекает весь мусор.
/bitrix/*
!/bitrix/templates/ # Оставляем только если у вас легаси и нет папки local
!/bitrix/components/ # Аналогично для старых проектов
/upload/
/bitrix/cache/
/bitrix/managed_cache/
/bitrix/html_cache/
*.restore.php
/local/php_interface/dbconn.php # Пароли от БД — только на сервере!
/bitrix/.settings.php # Основные настройки соединения
/bitrix/.settings_extra.php # Локальные оверрайды (об этом ниже)
*.log
/public_html/sitemap*.xml
Решение проблемы конфигураций
Классическая ситуация: разработчик Вася включил у себя debug => true, чтобы видеть ошибки. Закоммитил файл .settings.php. Этот файл улетел на прод. Теперь все посетители интернет-магазина видят стек трейс ошибки вместо красивой 404 страницы. Бизнес теряет деньги.
Лайфхак с .settings_extra.php
Битрикс умеет подключать дополнительный файл настроек, если он существует. Это спасение для командной разработки.
- Основной
.settings.php(с доступами к боевой БД) лежит на сервере и никогда не попадает в Git. - В
.gitignoreдобавляем/bitrix/.settings_extra.php. - Каждый разработчик создает этот файл у себя локально и переопределяет там нужные ключи: подключение к своей локальной базе, режим отладки, вывод ошибок.
В итоге, даже если вы пушите изменения, настройки окружения не перезатираются. Это принцип Immutable Infrastructure в миниатюре.
База данных: Главная боль и её лечение
Git версионирует строки кода. Он понятия не имеет, что вы зашли в админку, кликнули "Создать инфоблок", добавили свойство "Артикул" и сохранили. Это изменение записалось в MySQL, а не в файл. Если вы запушите код компонента, который использует это свойство, на сервер, сайт упадет, потому что на сервере этого свойства в базе еще нет.
Решение: Миграции БД.
В 2025 году создавать структуру базы данных руками на проде — дурной тон. Мы используем подход "Migration as Code".
Как это работает на практике:
- Инструмент: Стандарт де-факто — модуль
arrilot/bitrix-migrations. Он бесплатный и надежный. - Процесс: Вы создаете свойство инфоблока на локальной машине. Запускаете команду, которая генерирует PHP-файл миграции. В этом файле описано: "Создать свойство X в инфоблоке Y".
- Деплой: Этот файл летит в Git. На сервере при деплое автоматически запускается скрипт, который "накатывает" миграцию. База данных на проде обновляется синхронно с кодом.
CI/CD Pipeline: Автоматизация рутины
Копирование файлов руками — это риск человеческого фактора. Я, например, могу забыть залить один файл CSS, и верстка поедет. Робот не забывает. Настройте простой пайплайн (GitLab CI, GitHub Actions или Jenkins), который делает всё за вас.
Вот как выглядит здоровый процесс доставки кода:
- Build: Сборка фронтенда (npm run build). Не храните скомпилированные
bundle.jsиstyle.cssв репозитории — собирайте их на лету. - Atomic Deploy: Код заливается в новую папку на сервере. Создается симлинк. Это позволяет переключить сайт на новую версию мгновенно, без простоя.
- Migration: Запуск
php migrator migrate. Структура БД обновляется. - Clear Cache: Обязательный сброс тегированного и managed кеша. Иначе Битрикс будет отдавать старые данные с новой версией кода.
Коммерческие аспекты и инструменты
Часто спрашивают: сколько стоит внедрить такой процесс? Сама технология Git бесплатна. Но инструменты вокруг могут требовать бюджета, хотя для старта почти всегда есть Free-тарифы.
| Инструмент | Назначение | Стоимость |
|---|---|---|
| GitLab / GitHub | Хранение кода и CI/CD | Бесплатно (для малых команд) |
| arrilot/bitrix-migrations | Миграции БД | Бесплатно (Open Source) |
| Docker | Контейнеризация среды | Бесплатно |
| Настройка процесса | Работа DevOps/Lead-разработчика | ~10-20 часов специалиста |
Внедрение этих практик — это инвестиция. По метрикам Яндекса (Proxima), сайты с высокой технической стабильностью и скоростью ранжируются лучше. А отсутствие простоев из-за кривого деплоя напрямую влияет на поведенческие факторы.
Когда стоит делегировать техническую часть
Настройка правильного Workflow — это как фундамент дома. Можно залить самому, замешивая бетон лопатой, а можно нанять бригаду с миксером. Результат будет и там, и там, но вопрос в качестве и потраченном времени. Если вы владелец бизнеса или менеджер проекта, вам не обязательно знать, как писать регулярки для .gitignore. Вам важно, чтобы сайт работал стабильно.
Я занимаюсь тем, что выстраиваю такие процессы "под ключ" и беру проекты на техническую поддержку. Это освобождает вашу голову для маркетинга и продаж, пока "под капотом" сайта всё работает как швейцарские часы. Разработка на Битриксе может быть комфортной, если сразу договориться с системой о правилах игры.
Частые вопросы
Можно ли использовать Git без миграций БД?
Можно, но это больно. Вам придется вести список изменений в текстовом файле («Вася, создай свойство "Цвет" перед деплоем!»). Рано или поздно кто-то забудет это сделать, и функционал сломается на проде. Миграции автоматизируют этот риск.
Почему нельзя просто запушить /bitrix и обновлять его через Git?
Потому что 1С-Битрикс — это проприетарный софт. Обновления приходят в виде архивов через админку и распаковываются, перезаписывая файлы. Если вы будете обновлять ядро через Git, вы потеряете возможность использовать штатную систему обновлений SiteUpdate, что лишит вас патчей безопасности.
Что делать с файлом urlrewrite.php?
Это вечная проблема. Битрикс перезаписывает его при сохранении правил ЧПУ. Рекомендую исключить его из Git, если вы меняете правила часто через админку. Либо, в идеале, добавлять правила программно через CUrlRewriter::Add в миграциях, запретив ручное редактирование на боевом сервере.
Как работать с файлами пользователей (/upload)?
Папка /upload часто весит десятки гигабайт. Git не предназначен для хранения тяжелого бинарного контента. Эту папку нужно добавить в .gitignore. При переносе сайта на другой сервер эту папку копируют отдельно (через rsync) или используют облачные хранилища (S3).
Нужен ли Docker для Битрикса?
Строго говоря, нет, сайт будет работать и на обычном LAMP/LEMP стеке. Но Docker гарантирует, что среда у разработчика на ноутбуке идентична среде на сервере. Это исключает баги в духе «у меня локально работает, а на сервере версия PHP другая и всё упало».