Полный цикл в digital

Настройка Git для Битрикс

В битрикс большинство страниц хранятся как физические файлы на сервере - это дает нам возможность отслеживать их через гит.

Кроме страниц, хочется в гит иметь шаблон и папку php_interface. Они могут храниться в папках bitrix и local. Если всю папку local мы можем добавить в гит, то с bitrix сложнее. В папке /bitrix/php_interface/ есть файл с доступами к базе данных, который не желательно хранить в гит.

В корне сайта из гит убираем .htaccess и robots.txt, в них часто прописывается хост сайта.

В корне сайта еще бывают файлы IDE разработчиков, xml карты сайта, некоторые любят дампы базы данных держать в кроне сайта, не пускаем всё это в гит.

Выкладываю оптимальный .gitignore для Bitrix, который максимально отслеживает всё файлы и не видит ядро:

.gitignore# исключаем папку /bitrix кроме некоторых подпапок
!/bitrix
/bitrix/*

# оставляем печатные формы интернет-магазина
!/bitrix/admin/
/bitrix/admin/*
!/bitrix/admin/reports/

# оставляем нестандартные компоненты
!/bitrix/components/
/bitrix/components/bitrix/

# сохраняем весь php_interface за редкими исключениями
!/bitrix/php_interface/
/bitrix/php_interface/dbconn.ph*
/bitrix/php_interface/after_connect*
/bitrix/php_interface/logs/

# сохраняем шаблоны сайта
!/bitrix/templates/

# исключаем логи
/local/php_interface/logs/
/local/logs/

# исключаем загружаемые файлы
/upload/

# различные системные папки и файлы хостингов и операционных систем
/cgi-bin/
/awstats/
/webstat/
.DS_Store
.Spotlight-V100
.Trashes
Thumbs.db
ehthumbs.db

# исключаем все текстовые и подобные ресурсы 
*.xml
*.html
*.txt
*.log
*.css.map

# архивы, включая многотомные
*.zip
*.zip*  
*.tar
*.tar*
*.enc
*.enc*
*.gz
*.gz*
*.tgz
*.tgz*
*.sql
*.rar
.hg
.ftpconfig
*.doc
*.docx
*.pdf
*.rtf
*.xls
*.xlsx
*.ppt
*.pptx
*.psd
*.psb
*.sketch
core.*

# храним robots.txt 
!/robots.txt
  • Исключаем из гита .html, .xml, .txt-файлы. Хотя в ряде случаев они могут быть важны, но такие случаи достаточно редки. Если подобный файл нужно внести в гит, добавляем его в исключения
  • Исключаем стандартные компоненты Битрикса, однако оставляем все остальные компоненты в том числе компоненты маркетплейса. Это продиктовано практикой: пользы от этого оказалось больше, чем вреда

Создание Git для 1 сайта

Проще всего создавать гит, когда у вас только 1 сайт, а тестовые делать когда система управления версиями готова.

Когда у нас только один сайт, достаточно: в папке сайта инициализировать гит, установить гитигнор, добавить все файлы в гит, закоммитить.

  1. Установить гитигнор
  2. В корне сайта инициализировать гит
  3. Добавить все файлы в гит
  4. Закоммитить

Создание Git для 2 сайтов

Когда сайта два, появляется проблема с тем, что они не всегда идентичны. Какие-то правки могут быть на одном сайте и не быть на другом. Создавая два отдельных гита на двух сайтах - их не получается просто слить вместе, потому что нет общей точки в истории коммитов.

Чтобы решить данные проблемы, поступим так: возьмем первый сайт за актуальный, в случае конфликта, не будем сливать, а возьмем файл отсюда. При первом слиянии разрешим слияние отдельных репозиториев, коммит слияния будет первой общей точкой. Первый сайт с актуальными файлами буду называть продакшн, второй сайт буду называть тестовый.

Подготовка

  1. На продакшине создаем гит аналогично инструкции для одного сайта, отправляем (пушим) в удаленный репозиторий
  2. На тестовом создаем гит, добавляем удаленный репозиторий (git remote add), но не отправляем (пушим)

После подготовки, работаем на тестовом, выполняем поочередно все команды.

Получаем данные, которые мы отправили с прода, с помощью git:

git fetch origin

Почти то же самое, что и git pull, только не происходит слияния:

push. git fetch

Получается сейчас у нас две отдельных истории коммитов в гит. Переключаем файлы на версию, как на проде:

git checkout origin/master

Из текущего состояния создаем ветку, чтобы можно было проводить слияния:

git checkout -b tmp

Тут самая магия, мы сливаем два отдельных гита в один. При конфликтах будет использоваться стратегия ours (наше), файлы будут как на проде, так как мы переключены на ветку с прода. --allow-unrelated-histories разрешает сливать гиты, у которых нет общей точки. Без этого вы получите ошибку refusing to merge unrelated histories.

git merge master --strategy=ours --allow-unrelated-histories

Обратно переключаемся в состояние тестового сайта:

git checkout master

Сливаемся с веткой tmp, в которой уже есть общий коммит с историей тестового и продакшен, при этом конфликтов нет:

git merge tmp

Всё отправляем обратно в удаленный репозиторий, дальше на продакшен. На продакшине никаких изменений не произойдет, потому что мы брали версию продакшина при слиянии:

git push

Полный набор команд:

git fetch origin
git checkout origin/master
git checkout -b tmp
git merge master --strategy=ours --allow-unrelated-histories
git checkout master
git merge tmp
git push
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг