Git flow для Битрикс-разработчика: ветки, деплой и работа с несколькими серверами

Использование Git в Битрикс-проектах имеет свою специфику: нельзя хранить весь /bitrix/ в репозитории, ядро обновляется через собственный механизм, а деплой часто вручную через FTP. В этой статье — практичный Git flow с конкретными командами для типичного Битрикс-проекта.

Что включать в .gitignore

Ядро Битрикс не должно быть в репозитории — оно обновляется через обновлятор и весит сотни мегабайт.

# .gitignore для Битрикс
/bitrix/
!/bitrix/php_interface/
!/bitrix/templates/
/upload/
/local/modules/bitrix.*/
*.log
*.bak
/bitrix/cache/
/bitrix/managed_cache/
/bitrix/stack_cache/

В репозитории храним только: /local/, /bitrix/templates/, /bitrix/php_interface/, свои компоненты, шаблоны и конфигурационные файлы.

Структура веток

main          — стабильный production
develop       — ветка разработки (staging)
feature/*     — отдельные задачи
hotfix/*      — срочные правки прямо в production

Типичный рабочий процесс

# Начало новой задачи
git checkout develop
git pull origin develop
git checkout -b feature/add-delivery-service

# Разработка...
git add local/components/my.delivery/
git commit -m "feat: добавить кастомную службу доставки DHL"

# Готово — мержим в develop
git checkout develop
git merge feature/add-delivery-service --no-ff
git push origin develop

# После тестирования — в main
git checkout main
git merge develop --no-ff
git tag -a v1.2.3 -m "Release 1.2.3"
git push origin main --tags

Деплой на сервер через Git

Самый простой способ деплоя — bare-репозиторий с post-receive хуком на сервере.

1. Создаём bare-репозиторий на сервере

mkdir -p /home/git/myproject.git
cd /home/git/myproject.git
git init --bare

2. Настраиваем post-receive хук

cat > /home/git/myproject.git/hooks/post-receive << 'EOF'
#!/bin/bash
GIT_WORK_TREE=/home/bitrix/www git checkout -f main
cd /home/bitrix/www
php -f local/tools/post_deploy.php
echo "Deploy completed"
EOF
chmod +x /home/git/myproject.git/hooks/post-receive

3. Добавляем remote на рабочем компьютере

git remote add production ssh://user@your-server.ru/home/git/myproject.git
git push production main

Скрипт post_deploy.php

После каждого деплоя полезно автоматически очистить кеш:

CleanAll();

echo date("Y-m-d H:i:s") . " — Deploy OK, cache cleared\n";

Hotfix: срочная правка в production

git checkout main
git checkout -b hotfix/fix-payment-callback
# правим...
git commit -m "fix: исправить обработку callback от ЮKassa"
git checkout main
git merge hotfix/fix-payment-callback --no-ff
git push production main
# синхронизируем с develop
git checkout develop
git merge hotfix/fix-payment-callback --no-ff

Работа с двумя серверами (staging + production)

git remote add staging   ssh://user@staging.ru/home/git/project.git
git remote add production ssh://user@prod.ru/home/git/project.git

# Пуш на staging из develop
git push staging develop:main

# Пуш на production из main
git push production main

Итог

Git flow для Битрикс не сложнее стандартного: главное с самого начала правильно настроить .gitignore и вынести кастомный код в /local/. Деплой через bare-репозиторий с хуком избавляет от FTP и ручной заливки файлов.