Сен
07
2021

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

Для чего нужен гит?

  • На большом проекте, где есть несколько разработчиков, появляется проблема - один человек может затереть правки другого. Для решения этой проблемы есть ветки.
  • Сложно переносить вручную правки (деплоить), когда они в десятках отдельных файлов. Тут в дело вступают удаленные репозитории, команды git push и git pull.
  • После какой-то правки на сайте появился баг, кто конкретно допустил ошибку и когда - не известно. Для поиска нужного коммита используйте git bisect.
  • Как посмотреть состояние сайта, которое было год назад? Используйте git checkout имя_коммита

Множество проблем решает установка гит.

Удаленный репозиторий - это не репо, который удалили, а репо, который находится на внешнем сервере, например на Github.

Создаем .gitignore

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

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

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

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

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

#
# Source: https://github.com/MashinaMashina/Bitrix/blob/master/gitignore
#

.idea
/.htaccess
/upload/
logs/
/*.html
/sitemap*.xml
~*
*.log
/*.sql
Thumbs.db
.DS_Store
._.DS_Store
/robots.txt

/bitrix/.settings.php
/bitrix/activities/
/bitrix/admin/
/bitrix/backup/
/bitrix/click.php
/bitrix/components/
/bitrix/coupon_activation.php
/bitrix/footer.php
/bitrix/gadgets/
/bitrix/header.php
/bitrix/image_uploader/
/bitrix/images/
/bitrix/index.php
/bitrix/js/
/bitrix/css/
/bitrix/license_key.php
/bitrix/modules/
/bitrix/otp/
/bitrix/p3p.xml
/bitrix/redirect.php
/bitrix/rk.php
/bitrix/rss.php
/bitrix/sounds/
/bitrix/spread.php
/bitrix/stop_redirect.php
/bitrix/template/
/bitrix/themes/
/bitrix/tmp/
/bitrix/tools/
/bitrix/urlrewrite.php
/bitrix/virtual_file_system.php
/bitrix/web.config
/bitrix/wizards/
/bitrix/catalog_export/
/bitrix/updates/
/bitrix/panel/
/bitrix/services/
/bitrix/php_interface/include/sale_payment/
/bitrix/php_interface/include/sale_delivery/

/bitrix/php_interface/dbconn.php

/bitrix/cache/
/bitrix/managed_cache/
/bitrix/stack_cache/
/bitrix/html_pages/
/bitrix/blocks/
/bitrix/resize_cache/

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

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

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

Необходимые команды:

cd /site_path
wget -O .gitignore https://raw.githubusercontent.com/MashinaMashina/Bitrix/master/gitignore
git init
git add -A
git config user.name "Your Name" && git config user.email "your@email.com"
git commit -m "Initial commit"

Где /site_path - путь к папке сайта

"Your Name" - ваше имя и фамилия латинскими символами

"your@email.com" - ваш емаил, желательно тот, что использовался при регистрации аккаунта в хранилище git репозитория (на Github, Gitlab...).

С помощью wget мы скачиваем гитигнор для Битрикс в папку сайта. Можно так же вручную вставить в файл .gitinore контент отсюда.

Добавление удаленного репозитория (хранилища Github, gitlab...):

git remote add origin https://github.com/youname/project.git
git push -u origin master

Где https://github.com/youname/project - ссылка на ваш репозиторий

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

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

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

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

Первый сайт, с актуальными файлами буду называть прод, второй сайт - тестовый.

Подготовка:

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

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

Команды:

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

После этого у нас репозитории свяжутся.

Разберем подробнее все команды

git fetch origin - получаем данные, которые мы отправили с прода, с помощью git push. git fetch - почти то же самое, что и git pull, только не происходит слияния.

git checkout origin/master - переключаем файлы на версию, как на проде. Получается сейчас у нас две отдельных истории коммитов в гит.

git checkout -b tmp - из текущего состояния создаем ветку, чтобы можно было проводить слияния.

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

git checkout master - обратно переключаемся в состояние тестового сайта

git merge tmp - сливаемся с веткой tmp, в которой: уже есть общий коммит с историей тестового и прода, нет конфликтов.

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

Пожалуйста, оцените на сколько вам понравилась статья!
Голосов: 6 Среднее: 5