Что такое управление версиями?
Система управления версиями — это программа (или набор программ), которая отслеживает изменения в коллекции файлов. Одна из задач этой системы — быстрый доступ к более ранним версиям отдельных файлов или всего проекта. Другая — позволить нескольким участникам команды работать над проектом, в том числе над одними и теми же файлами, одновременно, не мешая друг другу.
Другое название систем управления версиями — системы управления конфигурацией программного обеспечения (SCM). Эти два термина часто используются как синонимы. Так, официальная документация по Git находится на сайте git-scm.com. С технической точки зрения, управление версиями — это лишь одна из методик, применяемых при управлении конфигурацией программного обеспечения. Систему управления версиями можно использовать не только для проектов ПО, но и в других целях, например для книг и интерактивных учебников.
С помощью системы управления версиями можно:
- просматривать все изменения, внесенные в проект, время их внесения и их авторов;
- сопровождать каждое изменение сообщением с обоснованием;
- получать предыдущие версии всего проекта или отдельных файлов;
- создавать ветви, в которых можно экспериментировать с изменениями; это позволяет одновременно работать с несколькими разными наборами изменений (например, функциями или исправлениями ошибок), в том числе разным людям, не затрагивая главную ветвь; затем можно выполнить слияние изменений, которые необходимо сохранить, с главной ветвью;
- добавлять теги к версиям, например, чтобы пометить новый выпуск.
Git — это быстрая, гибкая, высокомасштабируемая, бесплатная система управления версиями с открытым кодом. Ее главным автором является Линус Торвальдс, создатель Linux.
Распределенное управление версиями
Более ранние экземпляры систем управления версиями, такие как CVS, Subversion (SVN) и Perforce, использовали централизованный сервер для хранения журнала проекта. Недостаток такой централизации заключался в том, что этот сервер может являться единой точкой отказа.
Система Git является распределенной. Это означает, что весь журнал проекта хранится как в клиенте, так и на сервере. Вы можете редактировать файлы без подключения к сети, записывать их после изменения локально и выполнять синхронизацию с сервером, когда появится подключение. В случае отказа сервера у вас по-прежнему будет локальная копия проекта. В принципе, можно обойтись без сервера. Изменения можно передавать по электронной почте или с помощью съемных носителей, но на практике никто так не использует Git.
Терминология Git
Чтобы понимать, как работает Git, нужно знать терминологию. Ниже приведен краткий список часто используемых терминов Git. Пока не уделяйте пристальное внимание деталям. Вы освоите все эти термины в процессе работы с упражнениями в модуле.
Рабочее дерево — набор вложенных каталогов и файлов, составляющих проект, над которым ведется работа.
Репозиторий — каталог на верхнем уровне рабочего дерева, в котором Git хранит весь журнал и метаданные проекта. Простой репозиторий — это репозиторий, который не является частью рабочего дерева. Он используется для общего доступа или резервного копирования. Простой репозиторий обычно является каталогом с именем, которое заканчивается на .git, например project.git.
Хэш — число, создаваемое хэш-функцией и представляющее содержимое файла или другого объекта в виде фиксированного количества цифр. В Git используются хэши длиной 160 бит. Одним из преимуществ использования хэшей является то, что Git может определить, изменился ли файл, путем хэширования его содержимого и сравнения результата с предыдущим хэшем. Если метка времени и даты файла изменяется, а хэш файла не изменяется, Git понимает, что содержимое файла не изменилось.
Объект — репозиторий Git содержит четыре типа объектов, каждый из которых однозначно идентифицируется хэшем SHA-1. Большой двоичный объект содержит обычный файл. Дерево представляет каталог. Оно содержит имена, хэши и разрешения. Фиксация представляет определенную версию рабочего дерева. Тег — это имя, связанное с фиксацией.
Фиксация — глагол фиксировать означает создать объект фиксации. Этот термин заимствован из области баз данных, где есть такое понятие, как фиксация в базе данных. Он означает, что вы фиксируете внесенные изменения, чтобы они стали доступны другим пользователям.
Ветвь — это именованная последовательность связанных фиксаций. Последняя фиксация в ветви называется головной. Ветвь по умолчанию, создаваемая при инициализации репозитория, называется
main
(в Git она часто называетсяmaster
). Головная фиксации текущей ветви называетсяHEAD
. Ветви — чрезвычайно полезная возможность Git. Они позволяют разработчикам работать независимо друг от друга (или вместе) в ветвях, а затем объединять свои изменения с ветвью по умолчанию.Удаленный репозиторий — это именованная ссылка на другой репозиторий Git. При создании репозитория Git создает удаленный репозиторий с именем
origin
, который является удаленным репозиторием по умолчанию для операций отправки и вытягивания.Команды, подкоманды и параметры — операции Git выполняются с помощью команд, таких как
git push
иgit pull
.git
— это команда, аpush
илиpull
— подкоманда. Подкоманда определяет операцию, которую необходимо выполнить в Git. Команды часто сопровождаются параметрами, перед которыми ставится дефис (-) или два дефиса (--). Например,git reset --hard
.
Эти и другие термины, такие как push
и pull
, станут понятнее в ближайшее время. Однако с чего-то нужно начинать. Кроме того, вам может быть полезно повторить термины из этого глоссария после завершения модуля.
Командная строка Git
Для Git доступны несколько различных графических пользовательских интерфейсов, включая GitHub Desktop. Во многих редакторах, таких как Microsoft Visual Studio Code, также есть интерфейс для взаимодействия с Git. Все они работают по-разному и имеют различные ограничения. Ни в одном из них не реализованы все функциональные возможности Git.
В упражнениях в этом модуле используется командная строка Git, в частности команды Git, выполняемые в Azure Cloud Shell. Однако интерфейс командной строки Git работает одинаково независимо от используемой операционной системы. Кроме того, командная строка позволяет использовать все функциональные возможности Git. Разработчики, работающие с Git только через графический пользовательский интерфейс, иногда сталкиваются с ошибками, которые не могут устранить. Чтобы исправить ситуацию, им приходится обращаться к командной строке.
Git и GitHub
При работе с Git может возникнуть вопрос о разнице между функциями, предоставляемыми Git и GitHub.
Как упоминалось ранее, Git — это распределенная система управления версиями, позволяющая множеству разработчиков и других участников совместно работать над проектом. Она дает возможность работать с одной или несколькими локальными ветвями и отправлять их содержимое в удаленный репозиторий.
GitHub — это облачная платформа, опирающаяся на технологию Git. Она упрощает совместную работу над проектами, предоставляя веб-сайт, инструменты командной строки и общий рабочий процесс, позволяющий разработчикам и пользователям взаимодействовать друг с другом. GitHub выступает в качестве удаленный репозиторий упоминаемого ранее.
Ключевые компоненты GitHub:
- Проблемы
- Обсуждения
- Запросы на включение внесенных изменений
- Notifications
- Наклейки
- Действия
- Вилки
- Проекты
Чтобы получить дополнительные сведения о GitHub, обратитесь к модулю Введение в GitHub на Microsoft Learn или к справочной документации Приступая к работе с GitHub.
Далее вы попробуете поработать в Git самостоятельно.