Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Что такое система управления версиями Git

5 сен 2024
Простыми словами рассказываем о том, что такое система контроля версий Git и для чего она нужна. Читайте в нашей статье об основных преимуществах и недостатках Git и его аналогах. Разберём на схемах основные термины и команды для работы с Git.

Что такое система управления версиями Git

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

Система управления версиями: что это такое

Система управления версиями, или Version Control System (VCS), — это программа для отслеживания всех изменений в проекте. Ее использование напоминаетв Google Документах, где у всех участников есть доступ к файлуи внесенным изменениям.

Представьте ситуацию: заказчик утвердил первую страницу интернет-магазина и просит вас продолжить разработку по образцу. Вы работаете дальше и создаете еще несколько страниц. Однако возвращается заказчик и просит переработать первую страницу. Благодаря системе контроля версий вы можете вернуть код к прежнему состоянию или перенести лишь нужные изменения.

Без системы контроля версий вам пришлось бы полагаться на память, искать части кода и переживать за его сохранность. Это как если бы несколько человек писали текст в Microsoft Word, обменивались файлами по почте и хранили изменения на компьютере. Организовать такой процесс можно, но высок риск запутаться или потерять важную информацию.

Какими бывают VCS:

Система управления версиями бывает:

  • локальной;
  • централизованной;
  • распределенной.

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

Revision Control System — одна из первых локальных систем, которая появилась в 1982 году.

Схема локальной системы управлениями версиями: каждое изменение сохраняется как новая версия
Схема локальной системы управлениями версиями: каждое изменение сохраняется как новая версия

Централизованная. В централизованных системах файлы размещаются на удалённом сервере. : над проектом может работать команда разработчиков. 

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

Установите Subversion или CVS, если нужно поработать с централизованными системами.

Схема централизованной системы управлениями версиями: полная и актуальная версия проекта хранится на сервере
Схема централизованной системы управлениями версиями: полная и актуальная версия проекта хранится на сервере

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

Система управления версиями Git — это самая популярная система, её мы и будем изучать далее.

Схема распределенной системы управлениями версиями: полная копия проекта одновременно хранится на удалённом сервере и локальных устройствах пользователей
Схема распределенной системы управлениями версиями: полная копия проекта одновременно хранится на удалённом сервере и локальных устройствах пользователей

Работа с проектами в Git

отличается от других распределённых систем способом хранения информации. Другие системы используют различий

— фиксируются лишь изменения между текущим и предыдущим состоянием файла.

Предположим, вы сохранили файл с текстом «I like ❤️ GitVerse». Если вы добавите к тексту восклицательный знак «!» и сохраните новый вариант, то в качестве изменений система запишет только восклицательный знак «!» без первоначального текста «I like ❤️ GitVerse».

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

Схема хранения информации в распределенных системах, которые работают по принципу различий

Хранение информации в распределенной системе Git 
Хранение информации в распределенной системе Git 

Git использует другой : он сохраняет «снимки» кода на всех этапах развития проекта. При этом каждое изменение записывается с учетом предыдущего состояния кода. Так можно изучить историю изменений и проследить, как развивался проект.

Сохраним файл с записью «I like ❤️ GitVerse». Теперь выполним следующее: добавим к тексту восклицательный знак «!», уберём сердце ❤️, уберём восклицательный знак «!», добавим фламинго 🦩, вернём сердце ❤️. Git зафиксировал шаги и сформировал цепочку: «I like ❤️ GitVerse» → «I like ❤️ GitVerse!» → «I like GitVerse!» → «I like GitVerse» → «I like GitVerse 🦩» → «I like ❤️ GitVerse 🦩». Так, двигаясь от последнего изменения к первому, можно отследить все состояния, в которых был проект.

Хранение информации в распределенной системе Git
Хранение информации в распределенной системе Git

Основные термины Git

После освоения Git вы не будете общаться с разработчиками привычными фразами. Вас не поймут, если вы скажете: «Я починил неисправность в коде на своём компьютере, сохранил изменения в системе контроля версий и перенёс их на удаленный сервер компании». Но прекрасно поймут фразу: «Я форкнул ветку на локалку, допилил баг и запушил коммит в центральный ». Новое предложение короче, но перенасыщено . Давайте познакомимся с новой терминологией и разберемся в базовых понятиях.

Репозиторий Git и его виды

Репозиторий — это папка, которую создает система Git. В ней хранится весь код проекта: текущая версия и файлы предыдущих версий. Также в репозитории есть метаданные — служебные файлы, которые нужны для структурирования и быстрой навигации по проекту.

Есть три основных вида репозиториев: локальный, удаленный и центральный. Если папка с проектом хранится на ноутбуке, то это локальный репозиторий. Когда папку загружают на облачный сервер, это удалённый репозиторий. А если участник проекта получает доступ к удаленному репозиторию, то в этом случае он работает с центральным репозиторием.

Репозиторий — это место, в котором Git хранит код со всеми файлами проекта
Репозиторий — это место, в котором Git хранит код со всеми файлами проекта

Ветка Git

Вместе с репозиторием Git создаёт главную ветку – branch проекта — и размещает на ней сохраненные изменения. Она похожа на леску с нанизанными бусинами. Последняя бусина на главной ветке отображает актуальную версию проекта — последний сохранённый файл в репозитории.

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

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

Ветка — это отдельная линия разработки со всеми сохраненными изменениями
Ветка — это отдельная линия разработки со всеми сохраненными изменениями

Сохранение новой версии проекта проходит в два этапа: сначала файлы из рабочей папки переносятся в индекс, а затем — из индекса в репозиторий. Индекс, или Staging Area, — это промежуточная зона, которую Git использует для подготовки файлов к сохранению.

Далее подготовленные файлы можно зафиксировать. Такой процесс называется коммитом — файлы из индекса перемещаются в репозиторий, и на ветке появляется новая бусина.

Файлы из рабочей папки попадают в индекс, а затем перемещаются в репозиторий. Дальше вы можете перемещаться между коммитами и просматривать историю проекта
Файлы из рабочей папки попадают в индекс, а затем перемещаются в репозиторий. Дальше вы можете перемещаться между коммитами и просматривать историю проекта

Пулл и пуш

Разработчики используют Git в связке с GitHub или другими сервисами, на которых можно разместить удалённый репозиторий. Однако Git работает только с локальными файлами и не может автоматически добавлять или скачивать изменения с удаленного репозитория. Эти действия нужно выполнять вручную с помощью команд пулл (pull) и пуш (push).

Команда pull загружает обновления с удалённого репозитория в локальный. Так вы получаете доступ к изменениям, которые внесли в проект другие участники. Команда push работает наоборот, она загружает обновления с локального репозитория на удаленный.

Пулреквесты

Иногда разработчики пишут пробный код и загружают его в главную ветку проекта. Команда pull request позволяет этого не допустить: разработчик пишет код, затем предлагает обновления и описывает, что сделал. Этот код проверяет старший разработчик, который одобряет обновление или отправляет на доработку. 

Основные команды для работы с Git

Git поддерживает около 150 команд. Однако большинство из них используются редко или нужны для специфических задач. Например, команды для настройки профиля используются один раз. А вот менять коммиты местами или откатывать изменения, может, и вовсе не придется.

Для ежедневных задач разработчикам обычно хватает около 25–30 команд. Мы рассмотрим десять из них, с которыми несложно разобраться новичку:

1. git clone: копирует удалённый репозиторий на ноутбук в локальный репозиторий.

  1. git
  2. git
  3. git
  4. git
  5. git

add: переносит рабочие файлы в индекс, готовит их к коммиту. commit: создаёт новую версию проекта в локальном репозитории. push: переносит новую версию проекта в удалённый репозиторий. pull: скачивает обновления с удалённого репозитория в локальный. branch: команда с несколькими настройками, позволяет создавать,

удалять и просматривать доступные ветки.

  1. git checkout: переход из одной ветки в другую.
  2. git merge: добавляет изменения из одной ветки в другую.
  3. git status:проверяет,есть ли в индексе новые файлы для загрузки врепозиторий.

10.git log:просмотристориисозданныхкоммитов.

Запомнить перечисленные команды сложно. Еще сложнее разобраться в опциях,которыеонипредлагают.Наэтотслучайестькомандаgit help— краткий справочник, который выводит список всех доступных команд с их кратким описанием.

Справочная документация по Git после ввода команды git help в терминале 
Справочная документация по Git после ввода команды git help в терминале 

Если вам нужна справка по какой-то конкретной команде, то укажите её названиепослеgit help.Втерминалепоявитсяруководствосописаниемтого, что эта команда делает, в каких ситуациях ее применять и какие настройки использовать.

Справочная документация по команде git add, которая переносит файлы в индекс
Справочная документация по команде git add, которая переносит файлы в индекс

Если информация из git help покажется сложной, перейдите на сайт git-scm.com в раздел с документацией. Выберите подраздел Reference → Visual Git Cheat Sheet. Это визуальная шпаргалка, которая переведена на русский язык и посвящена git-командам.

Ссылка на визуальную подсказку в документации 
Ссылка на визуальную подсказку в документации 
Визуальная подсказка по основным командам от разработчиков
Визуальная подсказка по основным командам от разработчиков

Преимущества и недостатки

Преимущества

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

Производительность. Git сохраняет изменения в виде коммитов, которые позволяют быстро откатываться назад и смотреть на состояние проекта в разные моменты времени. Кроме того, Git задействует мощности локальных устройств и компактно структурирует данные в репозитории. Из-за этого он быстро работает даже с объемными проектами.

Гибкость. За счёт системы ветвления Git упрощает командную разработку и позволяет множеству специалистов работать над общим проектом независимо друг от друга. В Git легко создавать, объединять, удалять и переключаться между различными ветками.

Отложенные изменения. Ситуация: разработчик долго работает над задачей, и тут его просят переключиться на починку бага. Основная задача не завершена, в других системах контроля версий ему пришлось бы сохранить незавершённые изменения и продолжить позже. В Git можно использовать функцию Stash и не проводить коммит до полного выполнения задачи. То есть можно исправить баг,затем выполнить задачу и завершить ее коммитом.

Недостатки

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

Аналоги Git

Subversion. Это бесплатная централизованная система контроля версий, которая была популярна в начале 2000-х до появления Git. Иногда встречается в старых проектах, поэтому на сайте git-scm.com есть инструкция, описывающая процесс переноса информации с Subversion на Git.

Azure DevOps Server. Это гибридная система контроля 2005 года от Microsoft. Система может работать сразу в нескольких облаках или на локальном компьютере. Отличается от Git многофункциональностью — в платформу встроено более 200 служб, ориентированных на разработчиков Microsoft и всех, кто использует язык C# вместе с технологией.NET. Для полного доступа нужна ежемесячная подписка.

Mercurial. Это бесплатная распределённая система контроля версий 2005 года, которая ориентирована на объемные репозитории. В систему можно установить новые расширения и с их помощью модифицировать базовые команды или добавить новые.

GitVerse. Российская платформа для работы с исходным кодом. Позволяет импортировать репозитории из других git-сервисов и использовать стандартные команды Git, обеспечивает безопасность и высокую скорость выполнения операций. Система поддерживает командную разработку и содержит инструменты для совместного код-ревью. Также в сервис встроен ИИ-помощник, который ищет способы оптимизации и объясняет, что делает данный фрагмент кода.

Что дальше

Время подкрепить теорию практикой. Перейдите в раздел «Использование Git», посмотрите гайд по подключению GitVerse — и вперед, за своим первым коммитом.