Как я обычно настраиваю Git репозиторий для работы с 1С-Битрикс

В простейшем варианте организации командной работы над проектом нам необходим — один основной сайт на сервере — будем называть его продакшеном, один сайт для тестирования (девелоперский сайт) — на сервере рядом с ним (дев. сайт) + по локальной копии сайта у каждого разработчика. (Девелоперских сайтов на сервере может быть несколько, но по поводу дополнительных дев. сайтов необходимо предварительно консультироваться с технической поддержкой Битрикс по поводу правомерности такой системы с точки зрения лицензионного договора). 

Каждый разработчик будет работать над проектом в своей локальной копии сайта, в отдельной ветке Git для каждой решаемой задачи. В конце дня каждый разработчик делает коммит в репозиторий, хранящийся на github.com и только один разработчик — ведущий, проверяет и объединяет ветки сначала на девелоперском сайте на сервере, а потом выкатывает полученный результат на продакшен. (По моему субъективному мнению, двоевластие на интернет-проекте — недопустимо. Даже если слияние веток и тестирование будет отнимать все рабочее время ведущего разработчика проекта — никто кроме него не должен вносить изменения на продакшен — сайт) В начале дня — разработчики обновляют свои репозитории с гитхаба. 

В случае, когда необходимо изменение структуры БД, разработчики сначала вносят изменения в своих локальных копиях, пишут список изменений ведущему разработчику, ведущий разработчик вносит их на продакшене, делает бекап БД продакшена, который затем накатывается на дев-сайт и на все локальные дев-сайты. Дополнительно настраивается репликация БД (но это уже тема для другой статьи). 

Итак, мы имеем выделенный сервер, два настроенных виртуальных хоста и установленное серверное ПО git — это, как правило, могут сделать для нас сотрудники хостинга, на котором мы покупаем сервер. 

В директории основного сайта разворачиваем бекап сайта стандартными средствами Битрикс (или руками), директория девелоперского сайта пока пусть будет пустой. 

Регистириуем корпоративный тариф на github.com Для системы, рассмотренной в данной статье, нам хватит тарифа за 25$ в месяц. Заводим приватный репозиторий, добавляем существующих пользователей githab к организации (или заводим новых пользователей) — это все делается очень прозрачно и удобно, поэтому не будем подробно заостряться на этом моменте. 

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

Заходим по ssh на наш сервер под пользователем с правами на запись в папки сайтов, переходим в директорию, в которой мы намерены инициировать репозиторий. 

Репозиторий можно инициировать непосредственно в папке сайта (тогда важно не забыть потом защитить папку .git в файле .htaccess от скачивания), а можно инициировать его в наддиректории (вариант, когда файлы каждого сайта лежат не сразу в директории www или директории dev, а в подкатологе, к примеру, dev/httpfiles, www/httpfiles А репозитории мы инициируем соответственно в директориях www и dev. Если сервер настраивается с нуля или если админу не лень перепрописать виртуальные хосты— этот вариант предпочтительнее). 

Перед тем, как инициировать репозиторий для основного сайта, необходимо определиться, какие папки и файлы необходимо включать в репозиторий, а какие — нет — сформировать файл .gitignore. 

Пример (упрощенный) файла .gitignore для 1С-Битрикс для случая, когда репозиторий инициируется в директории сайта: 

/bitrix/backup 
/bitrix/cache 
/bitrix/crontab 
/bitrix/managed_cache 
/bitrix/managed_flags 
/bitrix/modules/*.log 
/bitrix/php_interface/crontab 
/bitrix/php_interface/dbconn.php 
/bitrix/stack_cache 
/logs 
/upload 
/.gitignore 
/.htaccess 
/urlrewrite.php 
/*.log 
/*.sql 
/*.txt 
/*.xml 
/*.dt 
То есть мы не будем контролировать изменения в папке бекапов (/bitrix/backup), папках кеша (/bitrix/cache, /bitrix/managed_cache, /bitrix/managed_flags, /bitrix/stack_cache), папках с заданиями крону (/bitrix/crontab), папке с логами (/logs), папке с загрузками (/upload). 
Папку с загрузками /upload на всех девелоперских копиях сайта, расположенных на одном с ним сервере, имеет смысл делать симлинком на папку /upload продакшен-сайта. 

Символическую ссылку в директории /dev/ — корневой директории девелоперского сайта создаем командой 

ln -s /path/to/www/upload 

К слову о символических ссылках. При конфигурировании многосайтовой системы на одном ядре 1С-Битрикс по 2му типу, папку bitrix мы так же должны будем исключить из основного репозитория. Потому что физически эта директория будет существовать только на одном сайте системы, а на других — будут символические ссылки на нее. Но так как контролировать изменения файлов этой папки все равно нужно, целесообразно будет завести для нее отдельный репозиторий. 

Файл /bitrix/php_interface/dbconn.php содержит индивидуальные для каждого виртуального хоста настройки (в частности настройки соединения с БД), поэтому этот файл мы добавляем в исключения git. 

Файл /urlrewrite.php — это файл с правилами обработки ЧПУ адресов Битрикс — он может быть перезаписан (сортируется внутри) самим движком, поэтому исключим и его. 

Файлы .gitignore и .htaccess тоже должны лежать в исключениях. В исключения так же стоит добавить файлы логов, текстовые файлы, xml-файлы – все то, что не относится непосредственно к программному коду. 

После того, как мы определились с содержимым .gitignore и создали файл .gitignore в директории будущего репозитория можно инициировать репозиторий для продакшен-сайта. Для этого нам сначала необходимо позаботиться об авторизации нашего серверного ssh-пользователя на githab — сгенерировать для него ключ. 

Выполняем команду 

ssh-keygen -t rsa -C “bitrix@имя.сайта” 

email можно вписать любой, но с email вида bitrix@имя.сайта легче идентифицировать ключ на гитхабе. 

Переходим на github.com/settings/ssh и добавляем новый ключ — данные самого ключа берём из файла /path/to/.ssh/id_rsa.pub 

Проверяем подключение: 

ssh-T git@github.com 

Инициируем репозиторий в директории основного сайта (или в наддиректории): 
переходим в /path/to/www/ и выполняем команды: 

git add README.md 
git commit -m “first commit” 
git remote add origin git@github.com:организация/имя_репо.git 
git push -u origin master 

После того, как репозиторий для основного сайта инициирован, зальем все файлы проекта в репозиторий гитхаб: 

git add . git commit -m “second commit” git push 

Теперь клонируем репозиторий в директорию девелоперского сайта: 

git clone git@github.com:организация/имя_репо.git dev 

После этого в директории девелоперского сайта создадим символическую ссылку на папку upload как было описано выше. Затем стандартными средства Битрикс сделаем бекап БД основного сайта, и развернем его на девелоперском — файл, хранящий подключение к БД при этом создастся для дев сайта автоматически. 

Теперь аналогичным образом можно создать клоны репозитория на локальных машинах разработчиков. Для этого им необходимо поставить любой комплект ПО git на свою локальную машину (командная Git строка идет в любом комплекте), запустить командную строку, сгенерировать ключ, добавить его на гитхаб, клонировать репозиторий в директорию виртуального хоста на локальной машине, а папку upload просто слить с основного сайта, накатить дамп БД с основного сайта. 

После этого можно расслабиться и наслаждаться командной работой, выстраивая с коллегами дружеские отношения без ссор и споров, оперативно откатывая некорректные изменения — без поиска виноватых. 

P/S: с некоторых пор я предпочитаю гитхабу битбукет

P/S2: 
Недавно уже холиварила на тему того, нужно ли включать папку bitrix в репозиторий после того, как появилась возможность разрабатывать темплейты, компоненты и модули в папке local. 

Меня попрекали тем, что я транслирую “устаревшие” понятия, и я даже чуть было не согласилась. Да что там – даже согласилась. Однако на проектах, которые веду – продолжала включать папку bitrix в репозиторий на всякий пожарный – оказалось – не зря. 

Вот мои новые аргументы для любителей похоливарить (кого я имею в виду – тот знает): 


1) Папка local-то появилась, а вот многие решения из Маркетплейс.Битрикс продолжают устанавливаться в папку /bitrix/modules/ Вы не считаете нужным контролировать их код? 

2) В папке local пока нельзя разрабатывать кастомные гаджеты для рабочего стола админки Битрикс.

Об авторе:

Инженер-программист по образованию, web-программист по призванию, Битрикс-программист по любви и 1с-программист по стечению обстоятельств, руководитель команды web-разработчиков, внедренец 1С-Битрикс и Битрикс24, основатель одноименной студии.

bedrosova3

Подпишитесь на рассылку!

Fields marked with an * are required

Комментарии

  1. Ответить

    Зачем .gitignore добавлять в .gitignore?

 

Комментировать

 

Подписаться на рассылку:

Fields marked with an * are required