Что такое система управления версиями 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 использует другой : он сохраняет «снимки» кода на всех этапах развития проекта. При этом каждое изменение записывается с учетом предыдущего состояния кода. Так можно изучить историю изменений и проследить, как развивался проект.
Сохраним файл с записью «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 создаёт главную ветку – branch проекта — и размещает на ней сохраненные изменения. Она похожа на леску с нанизанными бусинами. Последняя бусина на главной ветке отображает актуальную версию проекта — последний сохранённый файл в репозитории.
Помимо главной ветки Git позволяет создавать дополнительные. В них разработчики могут работать и экспериментировать — их код не влияет на
содержание и работу главной ветки. Когда работа будет закончена, стабильный код из вспомогательных веток можно будет перенести на главную.
Сохранение новой версии проекта проходит в два этапа: сначала файлы из рабочей папки переносятся в индекс, а затем — из индекса в репозиторий. Индекс, или Staging Area, — это промежуточная зона, которую Git использует для подготовки файлов к сохранению.
Далее подготовленные файлы можно зафиксировать. Такой процесс называется коммитом — файлы из индекса перемещаются в репозиторий, и на ветке появляется новая бусина.
Пулл и пуш
Разработчики используют Git в связке с GitHub или другими сервисами, на которых можно разместить удалённый репозиторий. Однако Git работает только с локальными файлами и не может автоматически добавлять или скачивать изменения с удаленного репозитория. Эти действия нужно выполнять вручную с помощью команд пулл (pull) и пуш (push).
Команда pull загружает обновления с удалённого репозитория в локальный. Так вы получаете доступ к изменениям, которые внесли в проект другие участники. Команда push работает наоборот, она загружает обновления с локального репозитория на удаленный.
Пулреквесты
Иногда разработчики пишут пробный код и загружают его в главную ветку проекта. Команда pull request позволяет этого не допустить: разработчик пишет код, затем предлагает обновления и описывает, что сделал. Этот код проверяет старший разработчик, который одобряет обновление или отправляет на доработку.
Основные команды для работы с Git
Git поддерживает около 150 команд. Однако большинство из них используются редко или нужны для специфических задач. Например, команды для настройки профиля используются один раз. А вот менять коммиты местами или откатывать изменения, может, и вовсе не придется.
Для ежедневных задач разработчикам обычно хватает около 25–30 команд. Мы рассмотрим десять из них, с которыми несложно разобраться новичку:
1. git clone: копирует удалённый репозиторий на ноутбук в локальный репозиторий.
- git
- git
- git
- git
- git
add: переносит рабочие файлы в индекс, готовит их к коммиту. commit: создаёт новую версию проекта в локальном репозитории. push: переносит новую версию проекта в удалённый репозиторий. pull: скачивает обновления с удалённого репозитория в локальный. branch: команда с несколькими настройками, позволяет создавать,
удалять и просматривать доступные ветки.
- git checkout: переход из одной ветки в другую.
- git merge: добавляет изменения из одной ветки в другую.
- git status:проверяет,есть ли в индексе новые файлы для загрузки врепозиторий.
10.git log:просмотристориисозданныхкоммитов.
Запомнить перечисленные команды сложно. Еще сложнее разобраться в опциях,которыеонипредлагают.Наэтотслучайестькомандаgit help— краткий справочник, который выводит список всех доступных команд с их кратким описанием.
Если вам нужна справка по какой-то конкретной команде, то укажите её названиепослеgit help.Втерминалепоявитсяруководствосописаниемтого, что эта команда делает, в каких ситуациях ее применять и какие настройки использовать.
Если информация из 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 — и вперед, за своим первым коммитом.