Git и выкладка проекта - что версионировать и как переносить
Проект на платформе в системе контроля версий выглядит иначе. Большая часть файлов принадлежит не вам, а платформе. Здесь собраны решения по этой теме.
Что общего у этих задач
Под контролем версий держат свой код, а не платформу. Каталог ядра и загрузки живут своей жизнью: их ставит и обновляет платформа. Их место - вне репозитория проекта.
Настройки стендов не хранятся вместе с кодом. Пароли базы и ключи сервисов отличаются на боевом сайте и на стенде. Поэтому их выносят из версионируемых файлов.
Выкладка - это перенос файлов плюс права. Файл, приехавший от другого владельца, платформа прочитает, но не перезапишет, и половина странностей после выкладки объясняется именно этим.
Выкладка - это не только файлы. Настройки, структура инфоблоков и права живут в базе, и без миграций боевой сайт получает новый код поверх старой структуры.
Решения подтемы
-
Git в проекте на платформе: состав репозитория и выкладка - что версионировать, что игнорировать, порядок выкладки.
-
Выкладка на боевой: порядок, структура, откат - точка возврата, миграции структуры, сброс кэша и проверка.
-
Миграции структуры: перенос инфоблоков и настроек между стендами - журнал применённых, коды вместо номеров, повторный запуск и откат.
-
Проверки перед выкладкой: синтаксис, стандарт, тесты, миграции - синтаксис, стандарт кода, тесты на копии, сборка.
-
После выкладки сайт сломался: разбор причин - структура данных, настройки окружения, права, кэш, файлы.
-
Сторонняя библиотека в проекте: composer, автозагрузка, выкладка - место файлов, автозагрузчик, версионирование, установка при выкладке.
-
Три контура проекта: разработка, тест, бой и порядок переноса - роли контуров, движение кода и данных, порядок выкладки, откат.
-
Правки не доехали на боевой: разбор причин - файлы не выложены, кэш кода, кэш платформы, чужой контур.
-
Перенос инфоблока через XML: структура и данные - состав выгрузки, загрузка на стенде, внешние коды, проверка.
Частые вопросы
Нужно ли держать в репозитории каталог ядра?
Нет: он ставится и обновляется платформой и весит гигабайты. В репозитории держат свой код проекта.
Где хранить пароли и ключи?
Вне версионируемых файлов: в отдельном файле настроек стенда или в переменных окружения. В истории изменений им не место.
Как выкладывать правки на боевой сайт?
Переносом файлов с проверкой владельца и прав. Правка файлов прямо на боевом сайте лишает историю смысла.
Что делать с загруженными файлами?
Держать вне репозитория и переносить отдельно. Каталог загрузок растёт непредсказуемо и версий не требует.
Связанные темы
- Архитектура проекта - что где лежит в проекте
- Стандарты кода - как писать то, что попадёт в репозиторий
- Свой модуль: структура, установка, автозагрузка - главный житель репозитория
- Перенос сайта на другой сервер: через восстановление и вручную - перенос целиком, а не правок
- Раздел Основы