К содержанию

Wiki · Технологии разработки

Git

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

Обычная история: сайт три года вёл один фрилансер, потом пропал. Новому подрядчику достаётся архив с сервера, и никто не знает, какие файлы правили, зачем и что сломается, если их тронуть. Первые недели уходят на раскопки. Если бы код лежал в Git, у нового разработчика была бы вся история проекта с пояснениями.

Git создал Линус Торвальдс в 2005 году для разработки ядра Linux. Программа бесплатная, распространяется под открытой лицензией GPLv2, официальный сайт git-scm.com. Git распределённый: каждая копия репозитория на компьютере любого разработчика содержит всю историю проекта целиком.

Репозиторий, коммит, ветка и слияние

Чтобы понимать разговоры разработчиков, хватит четырёх слов.

  • Репозиторий. Папка проекта вместе со всей историей изменений.
  • Коммит. Сохранённый шаг: какие строки изменились, кто это сделал, когда и с каким комментарием.
  • Ветка. Параллельная линия работы. Новую функцию делают в отдельной ветке, и рабочий сайт её не видит, пока задачу не проверят.
  • Слияние (merge). Перенос готовой ветки в основную, из которой собирается рабочий сайт.

История проекта выглядит как журнал. Условный пример вывода команды git log:

a1f3c2e Исправлена отправка формы заказа
9b7d410 Блок отзывов на главной
3e52a8b Переход на PHP 8.2

Если после правки с блоком отзывов на сайте что-то сломалось, видно, кто вносил правку и что именно поменялось. Отменить её можно отдельной командой, не трогая остальные изменения. Работает это, пока коммиты небольшие и подписаны по делу: коммит «правки» на сотни файлов историю не объясняет и точечно не отменяется.

Пять шагов работы с Git: ветка задачи, коммиты, проверка на тестовой копии, слияние в основную ветку и выкладка на рабочий сайт
Как правка попадает на сайт через Git

Git, GitHub и GitLab

Сам Git – программа, которая ведёт историю. GitHub, GitLab и похожие сервисы хранят репозитории в интернете и добавляют командную работу: доступы, обсуждение правок, задачи.

СервисЧто этоКогда выбирают
GitHubОблачный сервис, принадлежит MicrosoftОткрытые проекты, команды, которые уже там работают
GitLabОблако или установка на свой серверНужно держать код у себя, плюс сборка и выкладка в одном месте
GitFlic, GitVerseРоссийские сервисы, GitVerse запустил СберТехВажно хранить код в российской инфраструктуре

Сервис можно сменить: код переносится вместе со всей историей коммитов, а задачи и обсуждения переезжают не всегда.

Зачем бизнесу, чтобы код сайта был в Git

  • Передача проекта. Новый подрядчик получает историю и комментарии, а не безымянный архив.
  • Откат. Неудачную правку отменяют за минуты, не восстанавливая весь сайт из копии.
  • Прозрачность. Видно, что и когда сделано по каждой задаче, спорные вопросы с подрядчиком решаются по истории.
  • Порядок выкладки. Правки сначала проверяют на тестовой копии, потом переносят на рабочий сайт.
  • Git не заменяет резервное копирование. База данных и загруженные файлы в нём обычно не хранятся.
Репозиторий, как и хостинг, оформляйте на свою компанию. Подрядчику дают доступ, а не наоборот. Тогда при смене команды код остаётся у вас.

Git и 1С-Битрикс

У 1С-Битрикс ядро обновляется через систему обновлений платформы, поэтому его в Git обычно не кладут. С 14-й версии главного модуля платформа поддерживает папку /local: свои компоненты, шаблоны и модули проекта выносят туда, и в репозитории держат её, а папку /bitrix исключают. Правки прямо в ядре опасны: очередное обновление их затрёт.

Учтите и другое: тексты, товары и настройки, которые меняют через админку, хранятся в базе данных и в Git не попадают. В репозитории живёт код, а контент защищают резервные копии. Кеш, загруженные картинки и ядро любой CMS в репозиторий тоже не кладут: он разрастается, а пользы от такой истории нет.

Что забрать при смене подрядчика

Когда проект переходит к другой команде, одного архива мало. Попросите:

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

Доступы к серверу, базе и сторонним сервисам передают отдельно и сразу меняют пароли. Особенно те, что когда-то попадали в код: из истории коммитов они не исчезают, даже если файл потом исправили.

Как проверить, что ваш сайт в Git

Попросите у подрядчика ссылку на репозиторий и доступ на чтение. Посмотрите дату последнего коммита. Если она полугодовой давности, а правки на сайте вносили на прошлой неделе, значит, файлы меняют прямо на сервере в обход Git, например по FTP. И проверьте с разработчиком, что служебная папка .git на сервере закрыта от доступа из браузера: открытая папка позволяет посторонним получить исходный код.

Сравнение сайта без Git и сайта в Git: история изменений, авторство правок, откат одной правки и проверка перед выкладкой
Сайт без Git и сайт в Git

Если проект уже ведётся в Git, берём его на доработку и техническую поддержку. Новый сайт можно заказать в разделе Разработка сайтов.

Откат, ветки, пароли и сервисы для Git

Как откатить неудачную правку, не потеряв остальные?

Найти её коммит в истории и выполнить git revert с его номером: Git создаст новый коммит, который отменяет только эти изменения, и его выкладывают на сервер как обычную правку. Команду reset на общей ветке для этого не используют, она переписывает историю у всей команды. Если правка меняла базу данных, откат кода её не вернёт.

Чем Git отличается от GitHub и какой сервис выбрать?

Git ведёт историю, а GitHub и похожие площадки держат репозитории онлайн и добавляют к ним права, обсуждения и задачи. Выбор зависит от того, где должен лежать код: на своём сервере удобен GitLab, в российской инфраструктуре GitFlic или GitVerse. Ошибиться не смертельно: код уедет со всей историей, хотя задачи и обсуждения иногда остаются на старом месте.

Как создать ветку под задачу и посмотреть уже существующие?

Новую ветку создают и сразу переходят в неё командой git switch -c с именем задачи, то же делает и привычная git checkout -b. Список локальных веток покажет git branch, а с ключом -a к нему добавятся ветки с сервера.

Как удалить ветку, когда задача уже на рабочем сайте?

Локально командой git branch -d с именем ветки: Git откажется удалять, если её изменения ещё не слиты, и это полезная защита. Копию на сервере убирают через git push origin --delete и то же имя.

Что делать, если пароль от базы попал в репозиторий?

Первым делом сменить сам пароль: правка файла не спасает, старое значение лежит в истории и во всех копиях репозитория. Вычистить историю можно утилитой git filter-repo, но после этого все участники заново забирают репозиторий. Дальше пароли держат в файле настроек, исключённом через .gitignore.

Почему Windows пишет, что git не является внутренней или внешней командой?

Так система сообщает, что не нашла программу: Git не установлен или не прописан в переменной PATH. Поставьте Git for Windows с git-scm.com, оставив в установщике запуск из командной строки, и откройте терминал заново.

Как работать с Git без командной строки?

Через визуальные клиенты. В VS Code работа с Git встроена: изменённые файлы, коммиты и ветки видны на отдельной панели. Есть и самостоятельные программы вроде GitHub Desktop, а в Git for Windows входит простой Git GUI. Менеджеру проекта часто хватает веб-интерфейса GitHub или GitLab, где видно, кто и что менял.

Где почитать о Git, папке /local и GitVerse

  • Git: официальный сайт, раздел About
  • Pro Git: «Краткая история Git»
  • 1С-Битрикс для разработчиков: «Поддержка папки /local/»
  • СберТех: новость о запуске GitVerse

См. также: CMS, Хостинг, Docker, Linux.

Остались вопросы по теме «Git»?

Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

Посчитайте стоимость проекта за 2 минуты

Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.